2

从 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%而不是以前的文件夹?

4

1 回答 1

4

%TEMP%文件夹 - 顾名思义 - 用于临时文件,仅在(通常很短的)时间段内需要,之后可以删除。在理想情况下,每个写入临时文件夹的应用程序都会在之后清理并删除它创建的临时文件,当它们不再需要时。但这不会发生,因此%TEMP%文件夹往往会变得很大。

您可以通过获取文件上的文件锁定来轻松阻止 Storage Sense 删除您仍然需要的文件。只要文件%TEMP%夹中的文件在使用中,就不会被删除。文件处理完成后,您可以释放文件锁定,这意味着您不再需要该文件,并且可以在下次运行 Storage Sense 时将其删除。

这样做的好处是,您的应用程序不再需要清理“混乱”(即临时文件)。只要需要,只需让应用程序锁定它们即可。释放锁后(或应用程序退出,这也会释放文件锁),它们将被系统自动删除。

于 2020-09-11T21:11:35.090 回答