为什么将7-zip / WinRAR文件解压缩到“ temp”,然后再将其移动到目的地?
对于直接将其解压缩到目标位置,我看不出任何优势。这确实很烦人,特别是对于大文件(现在!)。
编辑:
请解释为什么它们没有到位。
为什么将7-zip / WinRAR文件解压缩到“ temp”,然后再将其移动到目的地?
对于直接将其解压缩到目标位置,我看不出任何优势。这确实很烦人,特别是对于大文件(现在!)。
编辑:
请解释为什么它们没有到位。
Answers:
您究竟如何提取文件?您在使用命令行还是GUI?您要拖动文件还是选择文件并使用提取功能?您是否正在使用shell扩展上下文菜单?
如果输入目标文件夹,然后选择提取功能或使用shell扩展名,则它们不会首先提取到临时文件夹,而是直接提取到目标。
如果您选择在UI中的文件,并拖动它们到目标文件夹,然后将解压到一个临时文件夹。
原因在于选择目的地的方式。如果输入目标文件夹或使用上下文菜单项,则程序将确切知道需要将其提取到的位置。但是,如果仅拖动文件,则由于OLE的拖放功能如何工作,该程序不知道目标文件夹在哪里。换句话说,它是资源管理器接收目标文件夹,而不是归档程序。结果,程序无法知道将它们提取到哪里,因此仅将它们提取到temp文件夹中,然后一旦完成,资源管理器便将其移动。通过使用两种方法提取大文件,您可以清楚地看到这一点。将其拖到文件夹中时,它将解压缩,然后您会看到Explorer的标准文件操作对话框将其移动到文件夹中。如果指定文件夹并单击解压缩,它将解压缩并且不会进行进一步的处理。
几年前,当我想在正在编写的程序中实现拖放操作时,我就以这种艰难的方式学到了这一点。
这样做是为了将减压所需的内存保持在最低水平。
如果他们不使用文件系统,则将在内存中进行解压缩。在内存不足的情况下,或对于较大的压缩文件,这或早或晚会耗尽可用内存并开始内存分页过程。
在这种情况下,分页将比仅使用文件系统慢很多,因为文件仍在被解压缩(并且页面文件一直在添加),而且还因为在解压缩文件时正在检查文件是否有错误,因此很多读/写操作。页面文件可能发生的最坏的事情。
编辑:关于临时目录的使用,因此要遵循许多操作系统准则。如果解压缩失败,则不能保证执行该操作的程序会在执行后自行清理。例如,它可能已崩溃。这样,目标目录中将不会残留任何文件,并且操作系统会在认为适当时将其丢弃。
原因比您想象的要简单:许多程序将文件解压缩为%temp%,原因是目标文件系统可能没有足够的空间。
现在,您可能知道文件系统可能有足够的空间,但是应用程序却没有。如果该文件系统被OS或其他应用程序使用,并且在解压缩时被填满怎么办?
开发人员假设%temp%具有“无限”的空间,而目的地没有。
不是7-zip或WinRAR开发人员,我在这里的评论纯粹是猜测。话虽这么说,使用临时空间将其解压缩到所有内容都完整为止,这有助于验证所有文件是否完整(即zip没有损坏)。
没有什么比解压缩大型压缩文件更糟糕的了,因为压缩文件的开头已经开始处理文件了。只是发现档案末尾有损坏。那时,您对一切失去信心。
我最后的评论是,我不记得从7-zip中看到过这种行为。当我右键单击并在此处说“解压缩”时,通常在解压缩文件时可以访问这些文件。您是否仔细检查过它不是某个地方?