Files @ c4151b335d1f
Branch filter:

Location: ATITD-Tools/Desert-Paint-Codex/Util/FileUtils.cs

Jason Maltzen
Add a step to publish as a self-contained executable.
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<string?, bool> verify)
        {
            string resultPath;
            
            string? appPath =
                System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

            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;
        }
    }
}