Почему не находит папку 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 шт):
Не надо писать кеш в папку с приложением. Пишите его в папку для временных файлов.
За местонахождение этой папки отвечает переменная окружения %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);