既然 Storage Sense 可以随时清理 %TEMP% 文件夹,为什么还要使用它呢?

2024-04-11

从 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% or %PROGRAMDATA%。但这就是重点 - 自从 Storage Sense 出现以来,我为什么要使用%TEMP%而不是以前的文件夹?


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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

既然 Storage Sense 可以随时清理 %TEMP% 文件夹,为什么还要使用它呢? 的相关文章

随机推荐