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."); } }
//=============== // 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."); } }
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."); } }
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."); } }
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; } }
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."); } }
//=============== // 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()); }