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

问题描述

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

解决方法

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

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...