2016-05-16 90 views
1

我搜索了所有的相關和重複,他們要麼沒有回答,要麼使用不同的方法,或不同的語言。文件和路徑確實存在,更重要的是,我覺得這正好在我的鼻子下面。代碼在這裏。File.Exists always returning False c#

static void Main() 
{ 
    string fileName = @"‪C:\Temp\eXample.txt"; 

    //FileInfo f = new FileInfo(fileName); 

    var isFileExisting = File.Exists(fileName); 
    Console.WriteLine(isFileExisting); 

    Console.ReadKey(); 
} 

什麼是更多,是當我取消FileInfo對象,我收到一條錯誤消息:「給出的路徑的格式不支持」。我真正想做的是檢查文件是否存在。

+6

你在字符串中有一個隱藏的字符。刪除整行並重新寫入,它將起作用。請參閱:http://i.imgur.com/2fn889P.png – Rob

+0

您是否嘗試過不使用@「」語法並轉義\「字符,如」C:\\ Temp \\ eXample.txt「? – mckeejm

+0

也許你的路徑不是「Temp」,而是「Temp」的空間? –

回答

-2

這聽起來像你可能有另一個問題,以及,基於當你取消註釋該行的結果,但是從File.Exists() documentation熊本摘錄重複:

如果主叫方沒有足夠的權限讀取指定的文件,不會引發異常,並且無論路徑是否存在,該方法都會返回false。

但是,大多數情況下,您應該首先避免調用File.Exists()。文件系統是易失性,因此此功能通常會在您進行檢查和嘗試訪問代碼中的文件之間創建爭用條件。誠然,隨着競爭條件的變化,它通常很馴服,但它仍然存在,這意味着如果訪問文件失敗,你仍然需要一個try/catch塊來處理異常。而且既然你需要這個,爲什麼還要費心去做這個檢查?您可以通過跳過它來節省自己的磁盤訪問次數,通常有一種方法可以避免這種需求,例如使用FileMode.OpenOrCreate

+0

雖然這也是我的第一,但是您會注意到提到的錯誤的格​​式錯誤。這將阻止這種行爲。 – mckeejm

3

聽起來像你的字符串「C:\ Temp \ eXample.txt」不是它的樣子。

您得到「給定路徑的格式不支持」如果字符串的第二個字符不是冒號(:)。

這會讓我認爲冒號前有某種UTF8隱藏字符(:)。只需擦除整個事物並重新輸入字符串即可。

+0

假設確認。我拿了原始的問題代碼,確實在「D」之前有一個字符。 –

+0

@Rob,我還不滿意評論,但我接受了你的建議,並與Saeed Jahed進行了確認。儘管如此 –