Почему не находит папку C#?

Вот метод:

private FileInfo[] GetCachedFiles(string directoryPath)
{
    var directory = new DirectoryInfo(directoryPath);
    if (!directory.Exists)
        throw new DirectoryNotFoundException("Не найдена директория кэша");

    var files = directory.GetFiles("*.json");
    if (files.Length == 0)
        return null;

    return files;
}

Он не может найти директорию Cache, хотя я создал ее, я не понимаю в чем причина. В параметре передается относительный путь "Cache".Картинка


Ответы (1 шт):

Автор решения: aepot

Не надо писать кеш в папку с приложением. Пишите его в папку для временных файлов.

За местонахождение этой папки отвечает переменная окружения %TMP%. Временных файлов не должно быть там, где у вас постоянные.

Получить путь к временной директории можно так.

private static readonly string cachePath = Path.Combine(Path.GetTempPath(), "MyAppCache");

Получится примерно такой путь C:\Users\<User_Name>\AppData\Local\Temp\MyAppCache

При обращении к кешу, просто делайте так

Directory.CreateDirectory(cachePath);

При этом, не нужно проверять directory.Exists так как метод CreateDirectory если каталог не существует, он его создаст, а если существует, то вернет путь к существующему.

private FileInfo[] GetCachedFiles()
{
    var directory = Directory.CreateDirectory(cachePath);

    var files = directory.GetFiles("*.json");
    if (files.Length == 0)
        return null;

    return files;
}

Дополнительный плюс такого подхода в том, что даже если вы перемещаете прилижение или меняются другие условия доступа к каталогу приложения, например запрет на запись в каталог с приложением, ваш кеш продолжит работать нормально.

Записать объект в кеш можно примерно так

public Task SaveCacheAsync<T>(string fileName, T data)
{
    string path = Path.Combine(cachePath, fileName);
    using var fs = File.Create(path);
    return JsonSerializer.SerializeAsync(fs, data);
}
await SaveCacheAsync("file.json", data);
→ Ссылка