示例#1
0
        public static void Save()
        {
            string lastPath = ")@#(*$";
            var    time     = FileManager.GetTime();

            FileManager.Create("Temp");
            using (var output = new StreamWriter("Temp/FileManager.data", false)){
                output.WriteLine("[Files]");
                foreach (var item in FileManager.filesByType)
                {
                    var extension = item.Key;
                    var files     = item.Value;
                    output.WriteLine("(" + extension + ")");
                    foreach (var file in files)
                    {
                        FileManager.SaveData(file, output, ref lastPath);
                    }
                }
                output.WriteLine("[Folders]");
                foreach (var item in FileManager.folders)
                {
                    FileManager.SaveData(item.Value, output, ref lastPath);
                }
            }
            if (FileManager.clock)
            {
                Debug.Log("[FileManager] : Save cache complete -- " + (FileManager.GetTime() - time) + " seconds.");
            }
        }
示例#2
0
        //===============
        // Setup
        //===============
        public static void Refresh()
        {
            var time = FileManager.GetTime();

            Event.Add("On Editor Update", FileManager.Monitor).SetPermanent();
            Event.Add("On Asset Changed", FileManager.Refresh).SetPermanent();
            FileManager.assets.Clear();
            FileManager.assetPaths.Clear();
            FileManager.filesByPath.Clear();
            FileManager.filesByType.Clear();
            FileManager.folders.Clear();
            FileManager.cache.Clear();
            FileManager.path = FileManager.dataPath.GetDirectory();
            var needsScan = !Application.isEditor || (Application.isEditor && !Utility.IsPlaying());

            if (needsScan)
            {
                FileManager.Scan(FileManager.path);
                FileManager.Scan(FileManager.path + "/Temp", true);
                if (FileManager.fullScan)
                {
                    FileManager.Scan(FileManager.dataPath, true);
                }
                FileManager.Save();
            }
            else
            {
                FileManager.Load();
            }
            if (FileManager.clock)
            {
                Debug.Log("[FileManager] : Refresh complete -- " + (FileManager.GetTime() - time) + " seconds.");
            }
        }
示例#3
0
        public static void Save()
        {
            string lastPath  = ")@#(*$";
            var    time      = FileManager.GetTime();
            var    cachePath = Application.isEditor ? "Temp/FileManager.data" : FileManager.root + "/FileManager.data";

            if (Application.isEditor)
            {
                FileManager.Create("Temp");
            }
            using (var output = new StreamWriter(cachePath, false)){
                foreach (var item in FileManager.filesByType)
                {
                    var extension = item.Key;
                    var files     = item.Value;
                    output.WriteLine("(" + extension + ")");
                    foreach (var file in files)
                    {
                        FileManager.SaveData(file, output, ref lastPath);
                    }
                }
            }
            if (FileManager.clock)
            {
                Debug.Log("[FileManager] : Save cache complete -- " + (FileManager.GetTime() - time) + " seconds.");
            }
        }
示例#4
0
        public static void Load()
        {
            var time = FileManager.GetTime();

            if (FileManager.Exists("Temp/FileManager.data"))
            {
                int    mode      = 0;
                string extension = "";
                string lastPath  = "";
                var    lines     = File.ReadAllLines("Temp/FileManager.data");
                for (int index = 0; index < lines.Length; ++index)
                {
                    var line = lines[index];
                    if (line.Contains("[Files]"))
                    {
                        mode = 1;
                    }
                    else if (line.Contains("[Folders]"))
                    {
                        mode = 2;
                    }
                    else if (line.StartsWith("("))
                    {
                        extension = line.Parse("(", ")");
                    }
                    else if (line.StartsWith("="))
                    {
                        lastPath = line.Remove("=").Replace("$", FileManager.path);
                    }
                    else if (line.StartsWith("+"))
                    {
                        lastPath += line.Remove("+");
                    }
                    else
                    {
                        var fileData = new FileData();
                        fileData.directory = lastPath;
                        fileData.name      = line;
                        if (mode == 1)
                        {
                            fileData.fullName  = fileData.name + "." + extension;
                            fileData.path      = fileData.directory + "/" + fileData.fullName;
                            fileData.extension = extension;
                        }
                        else if (mode == 2)
                        {
                            fileData.path     = fileData.directory + "/" + fileData.name;
                            fileData.isFolder = true;
                        }
                        FileManager.BuildCache(fileData);
                    }
                }
            }
            if (FileManager.clock)
            {
                Debug.Log("[FileManager] : Load cache complete -- " + (FileManager.GetTime() - time) + " seconds.");
            }
        }
示例#5
0
        public static void Monitor()
        {
            var time = FileManager.GetTime();

            if (time > FileManager.lastMonitor)
            {
                foreach (var item in FileManager.monitors)
                {
                    if (item.Value.WasChanged())
                    {
                        FileManager.Refresh();
                        break;
                    }
                }
                FileManager.lastMonitor = time + 0.3f;
            }
        }
示例#6
0
        public static void Load()
        {
            var time      = FileManager.GetTime();
            var cachePath = Application.isEditor ? "Temp/FileManager.data" : FileManager.root + "/FileManager.data";

            if (FileManager.Exists(cachePath))
            {
                string extension = "";
                string lastPath  = "";
                var    lines     = File.ReadAllLines(cachePath);
                for (int index = 0; index < lines.Length; ++index)
                {
                    var line = lines[index];
                    if (line.StartsWith("("))
                    {
                        extension = line.Parse("(", ")");
                    }
                    else if (line.StartsWith("=") || line.StartsWith("+"))
                    {
                        lastPath = line.StartsWith("=") ? line.TrimLeft("=").Replace("$", FileManager.root) : lastPath + line.TrimLeft("+");
                        var folderData = new FileData();
                        folderData.name      = lastPath.GetPathTerm();
                        folderData.directory = lastPath.GetDirectory();
                        folderData.path      = lastPath;
                        folderData.isFolder  = true;
                        FileManager.BuildCache(folderData);
                    }
                    else
                    {
                        var fileData = new FileData();
                        fileData.directory = lastPath;
                        fileData.name      = line;
                        fileData.fullName  = fileData.name + "." + extension;
                        fileData.path      = fileData.directory + "/" + fileData.fullName;
                        fileData.extension = extension;
                        FileManager.BuildCache(fileData);
                    }
                }
            }
            if (FileManager.clock)
            {
                Debug.Log("[FileManager] : Load cache complete -- " + (FileManager.GetTime() - time) + " seconds.");
            }
        }
示例#7
0
        //===============
        // Primary
        //===============
        public static FileData[] FindAll(string name, bool showWarnings = true, bool firstOnly = false)
        {
            name = name.Replace("\\", "/");
            var time = FileManager.GetTime();

            if (name == "" && showWarnings)
            {
                Debug.LogWarning("[FileManager] No path given for search.");
                return(null);
            }
            string searchKey = name.ToLower();

            if (FileManager.cache.ContainsKey(searchKey))
            {
                return(FileManager.cache[searchKey]);
            }
            if (name.StartsWith("!"))
            {
                name = name.ReplaceFirst("!", "");
            }
            if (name.ContainsAny("<", ">", "?", ":", "|"))
            {
                if (name[1] != ':')
                {
                    if (FileManager.debug)
                    {
                        Debug.LogWarning("[FileManager] Path has invalid characters -- " + name);
                    }
                    return(new FileData[0]);
                }
            }
            if (!name.Contains(".") && name.EndsWith("*"))
            {
                name = name + ".*";
            }
            if (name.Contains("*"))
            {
                firstOnly = false;
            }
            else if (name.Contains(":"))
            {
                firstOnly = true;
            }
            string fileName = name.GetFileName();
            string path     = name.GetDirectory();
            string type     = name.GetFileExtension().ToLower();
            var    results  = new List <FileData>();
            var    types    = new List <string>();
            var    allTypes = FileManager.filesByType.Keys;

            if (type.IsEmpty() || type == "*")
            {
                types = allTypes.ToList();
            }
            else if (type.StartsWith("*"))
            {
                types.AddRange(allTypes.Where(x => x.EndsWith(type.Remove("*"), true)));
            }
            else if (type.EndsWith("*"))
            {
                types.AddRange(allTypes.Where(x => x.StartsWith(type.Remove("*"), true)));
            }
            else if (FileManager.filesByType.ContainsKey(type))
            {
                types.Add(type);
            }
            foreach (var typeName in types)
            {
                FileManager.SearchType(fileName, typeName, path, firstOnly, ref results);
            }
            if (results.Count == 0)
            {
                foreach (var item in FileManager.folders)
                {
                    FileData folder     = item.Value;
                    string   folderPath = item.Key;
                    if (folderPath.Matches(name, true))
                    {
                        results.Add(folder);
                    }
                }
            }
            if (results.Count == 0 && showWarnings)
            {
                Debug.LogWarning("[FileManager] Path [" + name + "] could not be found.");
            }
            FileManager.cache[searchKey] = results.ToArray();
            if (FileManager.clock)
            {
                Debug.Log("[FileManager] : Find [" + name + "] complete (" + results.Count + ") -- " + (FileManager.GetTime() - time) + " seconds.");
            }
            return(results.ToArray());
        }