2016-05-16 3 views
1

Я искал ВСЕ связанные и дублирование, и они либо остаются без ответа, либо иным способом, либо другим языком. Файл и путь ДЕЙСТВИТЕЛЬНО существуют, и, что еще, я чувствую, что это прямо под моим носом. Код здесь.File.Exists всегда возвращает 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

Возможно, ваш путь не «Темп», а «Темп» с пространством? –

ответ

-2

Это звучит, как вы, возможно, есть еще одна проблема, а также, основываясь на результатах, когда вы раскомментировать эту строку, но это отрывок из File.Exists() documentation медведей повторял:

Если абонент не имеет достаточных прав для чтения указанный файл, исключение не генерируется, и метод возвращает false независимо от наличия пути.

В основном, однако, в первую очередь следует избегать вызова File.Exists(). Файловая система volatile, и поэтому эта функция обычно создает состояние гонки между тем, когда вы делаете чек и когда пытаетесь получить доступ к файлу в коде. Конечно, по мере того, как условия гонки идут, это обычно довольно ручно, но он все еще там, что означает, что вам все еще нужен блок try/catch для обработки исключения, если доступ к файлу не удался. И так как вам это нужно, зачем даже делать чек? Вы сохраните себе доступ к диску, пропустив его, и обычно есть способ избежать необходимости вообще, например, с помощью FileMode.OpenOrCreate.

+0

Это было мое первое, хотя тоже, но вы заметите неверную ошибку формата, о которой упоминалось. Это предотвратило бы такое поведение. – mckeejm

3

Похоже, что ваша строка «C: \ Temp \ eXample.txt» не похожа на нее.

Вы получаете «Формат данного пути не поддерживается», если второй символ вашей строки не является двоеточием (:).

Это привело меня к мысли, что есть какой-то скрытый символ UTF8 перед вашим двоеточием (:). Просто сотрите все это и снова введите строку.

+0

Успение подтверждено. Я взял исходный код вопроса, и есть символ до «D». –

+0

@Rob, я пока не могу оставлять комментарии, но я принял ваше предложение и подтвердил его с Саидом Жаэдом. Спасибо, тем не менее, –

Смежные вопросы