50 lines
1.9 KiB
C#
50 lines
1.9 KiB
C#
namespace Phares.Shared.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<string> 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 = Path.Combine(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;
|
|
}
|
|
|
|
} |