namespace EDAViewer.Models.Stateless.Methods; internal abstract class WorkingDirectory { internal static string GetWorkingDirectory(string? executingAssemblyName, string subDirectoryName) { string result = string.Empty; if (executingAssemblyName is null) throw new Exception(); string traceFile; List directories = new(); Environment.SpecialFolder[] specialFolders = new Environment.SpecialFolder[] { Environment.SpecialFolder.LocalApplicationData, Environment.SpecialFolder.ApplicationData, Environment.SpecialFolder.History, Environment.SpecialFolder.CommonApplicationData, Environment.SpecialFolder.InternetCache }; foreach (Environment.SpecialFolder specialFolder in specialFolders) directories.Add(Path.Combine(Environment.GetFolderPath(specialFolder), subDirectoryName, executingAssemblyName)); foreach (string directory in directories) { for (int i = 1; i < 3; i++) { if (i == 1) result = directory; else result = string.Concat("D", directory[1..]); try { if (!Directory.Exists(result)) _ = Directory.CreateDirectory(result); traceFile = string.Concat(result, @"\", DateTime.Now.Ticks, ".txt"); File.WriteAllText(traceFile, traceFile); File.Delete(traceFile); break; } catch (Exception) { result = string.Empty; } } if (!string.IsNullOrEmpty(result)) break; } if (string.IsNullOrEmpty(result)) throw new Exception("Unable to set working directory!"); return result; } }