using System; namespace DesertPaintCodex.Util { internal static class FileUtils { public static string AppDataPath => System.IO.Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "DesertPaintCodex"); public static string? FindApplicationResourceDirectory(string dirName) { return FindApplicationResource(dirName, System.IO.Directory.Exists); } public static string? FindApplicationResourceFile(string fileName) { return FindApplicationResource(fileName, System.IO.File.Exists); } private static string? FindApplicationResource(string path, Func verify) { string resultPath; // string? appPath = // System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); string? appPath = System.IO.Path.GetDirectoryName(AppContext.BaseDirectory); if (appPath != null) { resultPath = System.IO.Path.Combine(appPath, path); if (verify(resultPath)) return resultPath; resultPath = System.IO.Path.Combine(appPath, "Data", path); if (verify(resultPath)) return resultPath; } // try "Resources/data" in case this is a Mac app bundle resultPath = System.IO.Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.Resources), "data", path); if (verify(resultPath)) return resultPath; // try "Resources" in case this is a Mac app bundle resultPath = System.IO.Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.Resources), path); if (verify(resultPath)) return resultPath; if (appPath != null) { resultPath = System.IO.Path.Combine(appPath, "Resources", "Data", path); if (verify(resultPath)) return resultPath; resultPath = System.IO.Path.Combine(appPath, "Resources", path); if (verify(resultPath)) return resultPath; } return null; } public static string FindNumberedFile(string baseName, string extension, string folder) { string filename = ""; int i = 0; do { ++i; filename = System.IO.Path.Combine(folder, $"{baseName}_{i}.{extension}"); } while (System.IO.File.Exists(filename)); return filename; } } }