2011-12-16 26 views
1

File.Exists和FileInfo.Exists在這種情況下不能使用,因爲它們檢查文件是否存在並且權限級別足夠。如何檢查文件是否存在,而不檢查是否有權讀取它?

有沒有簡單的方法來檢查文件是否存在,而不管權限?

問題的上下文是一個常見問題:詢問用戶是否真的要覆蓋現有文件。你很少想覆蓋你不擁有的文件,而對File.Exists的調用會錯過這種情況,並將其與不存在的文件混淆。

+0

如果您沒有訪問權限的特定目錄無法看到你將如何能夠檢查是否存在的文件有或沒有。但你可以檢查你是否有[訪問權限](http://www.eggheadcafe.com/microsoft/Csharp/30271754/check-users-directory-permissions.aspx) – Magnus 2011-12-16 09:09:48

+0

Magnus:是的,但我想到在這種情況下,您有權訪問目錄,但不能訪問其中的文件。 – Joh 2011-12-16 11:41:38

+0

似乎File.Exists的MSDN文檔是錯誤的。 http://msdn.microsoft.com/en-us/library/system.io.file.exists.aspx說:「如果調用方沒有足夠的權限來讀取指定的文件,則不會引發異常,並且該方法返回false不管路徑的存在如何「。我剛剛在Windows 7 pro上進行了測試,並且File.Exists對於我拒絕讀取權限的文件返回true。 – Joh 2011-12-20 09:03:43

回答

1
static bool FileExists(string path) 
{ 
    var dirInfo = new DirectoryInfo(Path.GetDirectoryName(path)); 
    string file = Path.GetFileName(path); 
    bool exists = (dirInfo.Exists && dirInfo.EnumerateFiles().Any(f => f.Name == file)); 
    return exists; 
} 
2

會使用DirectoryInfo這樣的工作嗎?

DirectoryInfo root = new DirectoryInfo("your_directory_path"); 
FileInfo[] listfiles = root.GetFiles("*"); 
if (listfiles.Length > 0) 
{ 
    //File exists 
    foreach (FileInfo file in listfiles) 
    { 
     // 
    } 
} 
else 
{ 
// 
}