C# Windows 下暫存檔案的正確存放位置

在各個系統中有各自習慣的檔案儲存位置,例如之前提到的 C# windows winform 程式的設定檔要儲存在哪裡? 就有說明使用者的資料建議儲存位置,那暫存檔呢?

在檔案總管的路徑輸入 %temp% 或是按下 Windows + R 輸入 %temp% 後會跳到以下路徑:
    
C:\Users\[User]\AppData\Local\Temp
    

這個路徑就是專門用來存放暫存檔案的

什麼是暫存檔案?

在執行任務時暫時存放的檔案,該任務結束後就不再需要的檔案,就是本次討論的「暫存檔」,常見的副檔名為 .tmp, .temp ,當然也可以是其他的副檔名

什麼時候會產生暫存檔案?

例如儲存當前檔案歷史變更紀錄,或是在任務執行過程中快取記憶體不足,只好借用硬碟上的儲存空間。正常情況下在軟體結束時應該要把暫存檔案刪除,以免這些未來不會使用到的檔案持續霸佔使用者的儲存空間,但是總是會有意外,所以我們才要把暫存的檔案儲存在固定的路徑,方便我們知道這些就是可以被清除的檔案。

那在 C# 中要如何取得暫存資料夾的路徑呢?取得只要一行:
    
// 取得 temp 路徑
string tempPath = System.IO.Path.GetTempPath();

// 顯示
Console.WriteLine(tempPath);
// C:\Users\ruyut\AppData\Local\Temp\
    

通常不會直接放在 temp 資料夾內,還會使用應用程式名稱建立一個資料夾,避免和其他應用程式的暫存檔案混在一起
    
string tempPath = System.IO.Path.GetTempPath();

tempPath = Path.Combine(tempPath, System.Reflection.Assembly.GetExecutingAssembly().GetName().Name ?? string.Empty);
if (!Directory.Exists(tempPath)) Directory.CreateDirectory(tempPath);

Console.WriteLine(tempPath);
// C:\Users\ruyut\AppData\Local\Temp\ConsoleApp1
    

不過要注意的是 temp 資料夾是任何應用程式都能存取,所以不要將需要保留的資訊儲存在 temp 資料夾,並且要做好暫存檔案隨時會遺失的準備

另外順帶提一下,Windows 還有另一個暫存資料夾,路徑在 C:\Windows\Temp ,只不過這個暫存資料夾主要是用來存放系統安裝過程中產生的站存檔案。

留言