2008-11-25 40 views
6

我需要知道,如果我可以創建一個特定文件夾的文件創建一個文件,但也有太多的事情要檢查,如許可,複製文件等 我我正在尋找類似File.CanCreate(@"C:\myfolder\myfile.aaa"的東西),但還沒有找到這樣的方法。 我唯一想到的就是嘗試創建一個虛擬文件並檢查異常,但這是一個不合理的解決方案,它也會影響性能。 你知道更好的解決方案嗎?如何檢查,如果我能在一個特定的文件夾

+0

但請注意,檢查是否可以創建一個文件(但是完成),然後,後來,在實際創建的文件仍然可以產生一個錯誤(你有競爭條件在這裏)。因此,通常最好的辦法就是創建(最終)文件,並處理可能的錯誤/異常。 – 2008-11-25 11:53:21

回答

14

在現實中,創建一個虛擬文件是不會在大多數應用中巨大的性能影響。當然,如果你有先進與創建權限,但沒有摧毀它可能會有點毛毛......

的GUID總是得心應手隨機名稱(以避免衝突) - 是這樣的:

string file = Path.Combine(dir, Guid.NewGuid().ToString() + ".tmp"); 
// perhaps check File.Exists(file), but it would be a long-shot... 
bool canCreate; 
try 
{ 
    using (File.Create(file)) { } 
    File.Delete(file); 
    canCreate = true; 
} 
catch 
{ 
    canCreate = false; 
} 
1

你可以使用CAS驗證沒有.NET策略(caspol)限制在該位置的文件的創建和寫作。

但這不會覆蓋Windows策略。您必須手動檢查NTFS策略。即使如此,還有一些流程可以決定您不允許創建文件(例如病毒掃描程序)。

最好,最完整的方法是嘗試它。

相關問題