2010-01-08 69 views
11

我想刪除一個文件,但下面的代碼不會這樣做。它不會拋出異常,但該文件仍然存在。那可能嗎?File.Delete不刪除文件

try 
{ 
    File.Delete(@"C:\File.txt"); 
} 
catch(Exception e) 
{ 
    Console.WriteLine(e); 
} 

如果文件不能被刪除,應該打印出來的異常,但不是。這應該失敗(如在File.Delete方法吞嚥任何錯誤)?

+1

你確定文件路徑是否正確?如果文件不存在,則不會拋出異常。 – 2010-01-08 04:25:03

+0

是什麼讓你覺得這個文件沒有被刪除? – 2010-01-08 04:27:11

+0

我會驗證是否屬於這種情況,但路徑看起來絕對正確,並且文件確實存在。 – kevindaub 2010-01-08 04:27:43

回答

16

File.Delete does  如果指定的文件不存在,則不會引發異常。 [MSDN文檔的某些以前版本錯誤地指出它的確如此]。

try 
{ 
    string filename = @"C:\File.txt"; 
    if (File.Exists(filename)) 
    { 
     File.Delete(filename); 
    } 
    else 
    { 
     Debug.WriteLine("File does not exist."); 
    } 
} 
catch(Exception e) 
{ 
    Console.WriteLine(e); 
} 
+4

@Mitch»我認爲這是不對的。從MSDN的第二句開始:「如果指定的文件不存在,則不拋出異常。」 http://msdn.microsoft.com/en-us/library/system.io.file.delete.aspx – 2010-01-08 04:27:19

+0

有趣的是,我將不得不在刪除之前做一個File.Exists來驗證這一點。謝謝。 – kevindaub 2010-01-08 04:29:40

+1

你是對的; 3.5 doco是正確的。一些以前的版本不是。 – 2010-01-08 04:30:20

2

確定文件名正確嗎?唯一不引發錯誤的時間是文件不存在。愚蠢的問題,但你有任何機會在文件名中有錯字?或者路徑中有錯誤?

3

檢查文件的路徑是否正確。如果文件不存在,則不會拋出異常。如果在Windows中設置了「隱藏已知文件類型的擴展名」,則一個常見錯誤是將名爲File.txt的文件與名爲File.txt.txt的文件混淆。