簡單的問題在這裏。我有一個C#程序,它需要將一些文件存儲到硬盤上,但我不需要它們對最終用戶有用,只有程序可以讀/寫的地方。C#目錄「玩」
是否有一個我可以通過編程引用的目錄作爲我的「文件空間操場」 - 也就是說,我可以自由地讀寫數據?
編輯:另外,如果我使用臨時目錄,文件保證有多長時間?當我的程序仍在運行時,我不希望它們消失!
簡單的問題在這裏。我有一個C#程序,它需要將一些文件存儲到硬盤上,但我不需要它們對最終用戶有用,只有程序可以讀/寫的地方。C#目錄「玩」
是否有一個我可以通過編程引用的目錄作爲我的「文件空間操場」 - 也就是說,我可以自由地讀寫數據?
編輯:另外,如果我使用臨時目錄,文件保證有多長時間?當我的程序仍在運行時,我不希望它們消失!
您可以使用系統臨時目錄,你可以得到:
string tmpDir = System.IO.Path.GetTempPath();
如果你願意,你可以在那裏創建子文件夾。臨時文件夾非常適合您不關心的文件。如果您想保留這些文件,您可以像Tim C和Graham Miller所建議的那樣使用ApplicationData文件夾。
只是好奇...有沒有理由爲什麼Windows會決定刪除臨時數據,而使用它的應用程序正在運行,對不對? – RavB 2010-06-09 16:04:47
Windows根本不會自動清理臨時目錄。作爲用戶,您必須手動完成。基本上,這是將應用程序的數據保存在用戶知道的地方的一種很好的方式,它只是暫時的。但是,有些實用程序會爲您清理臨時目錄,並且如果在應用程序執行過程中將其設置爲關閉,它將在您的應用程序使用它時刪除數據。儘管如此,這是相對罕見的 – 2010-06-09 16:08:14
臨時目錄中的文件只能手動(由用戶)或硬盤清理過程(通常手動或計劃運行)刪除。與往常一樣,你應該用一些Try..Catch塊來包裝你的代碼來處理諸如File Not Found或沒有足夠磁盤空間的事情。如果你不關心文件名是什麼,你可以使用Path.GetTempFileName方法來生成一個文件名。 – TLiebe 2010-06-09 16:09:39
這聽起來像你正在尋找isolated storage:
隔離存儲是數據存儲 機制,通過定義標準化的方式代碼保存的數據相關聯的 提供隔離和安全 。 標準化也提供了其他 的好處。管理員可以使用 使用專門設計來操縱 孤立存儲的工具來配置文件 存儲空間,設置安全策略, 並刪除未使用的數據。使用獨立的 存儲空間,您的代碼不再需要 唯一路徑來指定文件系統中的安全位置 ,並且數據是 受其他應用程序保護,該應用程序只能隔離存儲訪問。 指示 的應用程序的存儲區域爲 的硬編碼信息是不必要的。
C:\TEMP
?
認真,不,沒有內置的沙箱操場。你必須選擇/創建一個適合你需求的目錄。
這通常是AppData
文件夾。它位於用戶特定的目錄樹中,但不在普通用戶的位置。
通常,應用程序特定的數據存儲在由枚舉指定的位置。您可以使用ApplicationData
每使用應用程序特定的數據,或者LocalApplicationData
爲每臺計算機的變種:
var playground = Environment.GetFolderPath(
Environment.SpecialFolder.ApplicationData));
使用系統臨時目錄:
System.IO.Path.Combine(System.IO.Path.GetTempPath(), "your app name")
的臨時目錄中自動清理由系統(通常通過硬盤清理),所以它通常是存儲隨機文件的最佳選擇,這些隨機文件僅在應用程序運行時需要並且不需要停留。
alt text http://i49.tinypic.com/10hix5x.png
如果您需要一個存儲用戶數據文件的一個更持久的解決方案,使用AppData文件夾被其他人的建議。
您也可以通過在運行對話框中輸入「%Temp%\ your app name」輕鬆地打開它。 – devios1 2010-06-09 15:57:13
臨時文件夾在您的應用程序運行時不會被刪除 - 我認爲硬盤清理只會刪除一週或更長時間未訪問的臨時文件。 – devios1 2010-06-09 15:58:44
實際上,它們不是「自動」清理的 - 用戶必須手動刪除它們或有意運行硬盤清理。 HDC可以「自動」清理它們,但首先仍然需要用戶操作。 – GalacticCowboy 2010-06-09 16:09:52
我會使用應用程序數據目錄。
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
它是在應用程序特定數據窗口中的首選位置,所以一般用戶隱藏,除非他們願意去尋找它:您可以使用類似得到它。
這個問題不是暫時的,不會自動清理。 – devios1 2010-06-09 15:48:18
但是,應用程序應該在該文件夾內創建一個*子文件夾*,而不是用文件污染基文件夾。通常的做法是使用ApplicationData \ Manufacturer \ Product。 – 2010-06-09 15:50:37
@chaiguy:這是真的,但在原始問題中,Adam沒有要求自動清理的臨時目錄。他要求提供「程序可以讀取/寫入」,「不需要它們對最終用戶有用的任何地方」以及「可以以編程方式引用」的位置。 – 2010-06-09 15:50:40
我想你想要的應用程序數據目錄:
var appplicationDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
基類庫爲您提供一個類來管理一組臨時文件。大家都隱藏在System.CodeDom
命名空間,但仍然可以在其他情況下也是有用的:
下面的示例顯示了TempFileCollection
類如何使用。
using System;
using System.CodeDom.Compiler;
using System.IO;
class Program
{
static void Main(string[] args)
{
TempFileCollection tfc = new TempFileCollection(Path.GetTempPath());
// add a temporary text file
string filename1 = tfc.AddExtension("txt");
// add another file with a fully specified name
// this file will not automatically be deleted
string filename2 = Path.Combine(tfc.TempDir, "mycustomfile.txt");
tfc.AddFile(filename2, true);
Console.WriteLine(tfc.Count);
// Create and use the test files.
File.WriteAllText(filename1, "Hello World.");
File.WriteAllText(filename2, "Hello again.");
tfc.Delete();
}
}
您是否有其他特殊要求?這些臨時文件是?你想阻止訪問文件嗎? – 2010-06-09 15:51:12
他們是暫時的。然而,它們可能會在程序運行時被打開,關閉並重新打開,所以我需要它們在程序啓動時不會消失。 我不需要防止任何其他訪問。 – 2010-06-09 15:57:51
關於你的編輯,他們會在那裏,直到你清理它們。你的程序應該自動執行此操作,但許多程序不會。這就是爲什麼Windows允許您運行工具來清理臨時文件夾,但它仍然是啓動它的操作。 – GalacticCowboy 2010-06-09 16:07:46