Начиная с Windows 10, Storage Sense позволяет пользователям указывать %TEMP%
очистку папки, которая выполняется не реже одного раза в день. Технически он может запускаться даже чаще, если он настроен для активации при нехватке места на диске, в зависимости от модели использования диска.
В свете этого, в чем смысл папки %TEMP%
? Как я могу использовать папку, в которой каждый файл, который я помещаю туда, технически может быть удален системой сразу после того, как я закончу его писать?
Вот реальный сценарий, в котором меня это поразило (код упрощен для краткости):
var ffmpegPath = Path.Combine(Path.GetTempPath(), "ffmpeg");
DownloadFfmpeg(path: ffmpegPath);
foreach (var videoFile in videoFiles) { //suppose there are dozens of files to process
DoSomeHeavyProcessing(ffmpegPath); //suppose each file takes an hour to process
}
Это отлично работало в течение первых нескольких часов, но затем в какой-то произвольный момент времени загруженная папка ffmpeg
была удалена, и все последующие файлы не могли быть обработаны. На самом деле, если я правильно понимаю, теоретически даже такой код может выйти из строя:
var path = Path.Combine(Path.GetTempPath(), "foo");
File.WriteAllText(path, "bar");
Console.WriteLine(File.ReadAllText(path));
Теперь я знаю, как решить эту проблему - просто используйте %APPDATA%
, %LOCALAPPDATA%
или %PROGRAMDATA%
. Но в том-то и дело - с момента появления Storage Sense, зачем мне использовать %TEMP%
вместо прежних папок?