題 為什麼發明%Temp%文件夾?


為什麼發明%Temp%文件夾?

為什麼任何程序都需要有一個臨時的數據文件夾?他們可以不只是使用RAM或任何其他臨時存儲?


4
2017-08-29 22:44


起源


我正在努力為此寫一個優雅的答案。我會讓其他人這樣做。可以這樣想,如果你只有2GB的內存並且你正在使用10GB文件怎麼辦?你不希望機器整個頁面都有頁面,所以你需要臨時文件/文件夾 - Keltari
@Keltari:沒有 許多 將8 GB轉儲到/ tmp並將8 GB轉儲到頁面文件之間的區別是什麼? - grawity
當然,優雅的答案是指出光盤 是 “其他臨時存儲”,是下一層RAM中的下一層 記憶層次。 - JdeBP


答案:


“臨時”文件的使用可以追溯到計算機運行MS-DOS並具有640 kB物理內存且沒有分頁的時間。使用設備驅動程序和TSR播放內存俄羅斯方塊,無可救藥地試圖釋放一些內存,這對於PC用戶來說是一個常見的(儘管不是完全“最喜歡的”)過去時間。

目前,%TEMP%仍然可以作為保留的地方  不需要永久保存。例如,當您從網站下載文檔並選擇“打開”而不是“保存”時,它仍然必須在本地保存到文件之前 - 這是唯一100%支持的傳遞方法數據到其他程序。 (畢竟,如果它在網站上顯示為文件,那就是 簡單 再次將其保存為文件。)

同樣,如果直接從存檔中打開文件,則首先將其解壓縮到%TEMP% - 存檔程序負責解壓縮,以便其他程序不需要。通常,您甚至可以在程序中編輯文件,之後將重新打包。 (相比之下,如果該計劃  要解壓縮文件本身,那麼每次保存時都必須重新打包,即使這很少需要。)


9
2017-08-29 22:54





程序員和高級用戶一直在使用名為的位置 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
2017-08-29 23:10



另一個考慮因素是您可能會將其他進程推送到頁面文件,因此操作系統必須最終讀取和寫入磁盤 無論如何。 - surfasb
@Surfasb我真的不明白你所說的確切措辭:/但是,(我認為)關於編寫頁面文件的好點,但是,它並不是真正“直接”相關的 %temp%所以,試著讓這個答案變得簡單! - William Hilsum
這是在提到這個問題。如果您寫入RAM而不是寫入臨時目錄,則可能會強制操作系統將其他進程寫入頁面文件。這是為臨時目錄設置RAMdisk的結果,這通常是不可取的。 - surfasb
@Surfasb +2!好的,公平的,謝謝,對不起!......在編寫答案時,我必須完全忘記問題的最後一點。我會盡力把它包括在內。 - William Hilsum
沒有血,沒有犯規。 - surfasb


使用我編寫的軟件,我使用臨時文件夾來處理飛機 CVR 文件。這些文件的大小通常為512 MB。在處理過程中,文件會經歷一系列格式。

  • 格式A:原始專有數據。
  • 格式B:隔行掃描數據。
  • 格式C:四個G711文件和一個包含附加數據的CVR文件。
  • 格式D:四個Wave文件和CVR文件。

我首先將原始文件複製到Temp文件夾,在該文件夾中進行所有處理。

我使用一個庫從格式A轉換為格式C(自動通過格式B)。該庫僅採用輸入文件名。它決定同一文件夾中的輸出文件名。這完全不受我的控制。

我使用第二個庫從格式C轉換為格式D.

文件所在的最終目錄對用戶是可見的,因此我不希望他們看到文件經過他們的過渡,或者讓他們看到部分文件,只看到最終輸出。一個完整的處理完成,所需的文件被移動到他們的最終目的地和 Temp 文件夾已刪除。

Temp 文件夾隱藏用戶的所有這些處理。他們需要知道的是進步百分比。


1
2017-08-30 00:44



有沒有辦法不使用臨時文件夾進行操作? - Pacerier
@Parcerier,我無法阻止庫生成臨時文件。我不得不要求圖書館設計師改變他們的圖書館以適應我的具體情況,他們不會花時間或金錢。 - Hand-E-Food
使用文件是管理大量數據的更負責任的方式。假設這個過程想要使用750Mb的內存,我的內存是1Gb。如果用戶決定在此數據處理過程中運行其他應用程序,那麼Windows將繼續將應用程序和後台進程交換進出虛擬內存,從而導致兩個進程的性能更差。 - Hand-E-Food