为什么要发明 %Temp% 文件夹?
为什么任何程序都需要有一个临时文件夹来存储数据?它们不能只使用 RAM 或任何其他临时存储吗?
答案1
“临时”文件的使用可以追溯到计算机运行 MS-DOS 且拥有 640 kB 物理内存且没有分页的时代。使用设备驱动程序和 TSR 玩内存俄罗斯方块,绝望地试图释放一些 RAM,是 PC 用户常见的(尽管并非“最喜欢的”)消遣方式。
如今,%TEMP% 仍可用作存放文件不需要永久保存的数据。例如,当您从网站下载文档并选择“打开”而不是“保存”时,它仍然必须先保存到本地文件,然后再提供给程序 - 这是将数据传递给其他程序的唯一 100% 支持的方法。(毕竟,如果它在网站上以文件形式呈现,那么它最簡單将其再次保存为文件。
类似地,如果您直接从存档中打开文件,则首先将其解压到 %TEMP%——存档程序负责解压,这样其他程序就不需要了。通常,您甚至可以在程序中编辑文件,然后重新打包。(相比之下,如果程序有解压文件本身,那么每次保存时都必须重新打包,即使这种做法很少有必要。)
答案2
多年来,程序员和高级用户一直使用称为temp
或的位置test
来存储不重要的文件,这些文件可以在使用完毕后删除。
%temp%
具体涉及Windows Temp Folder Variable
,这是每个用户的变量(在现代系统上,它默认为%USERPROFILE%\AppData\Local\Temp
)。当应用程序有临时文件要求时,它们可以写入此文件夹。
最大的例子就是安装程序。许多安装程序都是单个文件,当您看到大型安装程序需要很长时间时,它通常是将文件扩展到 %temp% 文件夹。
我经常编写需要临时/暂存文件夹的批处理脚本。它们很小,我通常总是使用md temp
,使用它,rd temp /s
。如果我分发一个脚本,并且它涉及很多文件,那么在%temp%
文件夹中使用一个唯一的名称是明智的(编码会有点尴尬)。虽然大多数人不会更改默认路径,但也有很多人会这样做,或者,在服务器环境中,您希望尽可能少地在主硬盘上进行更改。
至于为什么不使用内存,这个道理今天仍然适用——内存不够大,无法处理所有事情。我的第一台笔记本电脑的内存为 2 MB 或 4 MB(我忘了),虽然许多程序都很小,但通常有一些程序的内存在 5-10 MB 的范围内(MS Office 整个套件的内存约为 20-30 MB!)。
现在,平均值要高得多(入门级机器大约为 2-4 GB,高级用户为 8-16 GB,有点钱的高级用户为 16 GB+),除了脚本等少数例外,内存的使用量确实可以比现在多得多。
然而,直到入门级机器达到 16-32 GB 范围(再过几年!)我认为我们不会有太大的进步。
%temp%
还会在这里停留很长一段时间!
答案3
在我编写的软件中,我使用临时文件夹来处理飞机驾驶舱语音记录器文件。这些文件通常大小为 512 MB。在处理过程中,这些文件会经过多种格式。
- 格式 A:原始专有数据。
- 格式B:隔行数据。
- 格式 C:四个 G711 文件和一个包含附加数据的 CVR 文件。
- 格式 D:四个 Wave 文件和 CVR 文件。
我首先将原始文件复制到临时文件夹,所有处理都在此进行。
我使用一个库将格式 A 转换为格式 C(自动通过格式 B 转换)。此库仅接受输入文件名。它会决定同一文件夹中的输出文件名。这一切都不受我控制。
我使用第二个库将格式 C 转换为格式 D。
文件最终所在的目录对用户是可见的,因此我不希望他们看到文件经过转换的过程,也不想让他们看到部分文件,只看到最终的输出。一旦所有处理完成,所需文件将移动到最终目的地,文件Temp
夹将被删除。
该Temp
文件夹向用户隐藏了所有这些处理过程。用户只需知道进度百分比。