Подтвердить что ты не робот

Почему System.IO.File.Exists(строковый путь) возвращает false?

System.IO.File.Exists(string path)

возвращает всегда false, даже если файл существует по указанному пути. Каким может быть возможное решение?

4b9b3361

Ответ 1

Это может быть проблема разрешения. Из документа :

Метод Exists возвращает false, если возникает какая-либо ошибка при попытке определить, существует ли указанный файл. Это может происходить в ситуациях, которые вызывают исключения, такие как передача имени файла с недопустимыми символами или слишком много символов, сбой или отсутствующий диск или если у вызывающего устройства нет разрешения на чтение файла.

Один из способов увидеть, что происходит, - просто попытаться прочитать файл (например, с помощью File.OpenRead). Я был бы удивлен, если это удастся - но если это не удается, исключение должно предоставить вам больше информации.

Ответ 2

Скрытие окончаний файлов в окнах иногда может вызвать путаницу: вы знаете, что ваш файл имеет имя file.txt, когда он фактически называется file.txt.txt, потому что последние 4 символа были скрыты ОС.

Ответ 3

Одна из возможностей, не упомянутая ни в одном из ответов, это "Перенаправление файловой системы" в Windows 8.1 и более поздних версиях.

Например, если ваша программа является 32-битным приложением и вы работаете в 64-битной Windows, то попытка доступа к% windir%\System32 будет перенаправлена на% windir%\SysWOW64. И если файл, к которому вы пытаетесь получить доступ, не существует в% windir%\SysWOW64, тогда System.IO.File.Exists (путь к строке) вернет значение False.

Ссылка на хорошую статью, объясняющую это поведение

Ответ 4

Как я обошел это, использовал Server.MapPath(fileName), поскольку он пытался найти файл где-то еще.

System.IO.File.Exists(Server.MapPath(string path))

Ответ 5

в моем случае возникает другая "тире" в имени файла.

var f1 = "4-37R.pdf";
var f2 = "4‐37R.pdf";
var r = f1==f2?"same":"diff";
Console.Write(r); //diff

получается

var c1 = '-';
var c2 = '‐';
Console.WriteLine((int)c1); //45
Console.WriteLine((int)c2); //8208

используйте тот же "-", чтобы устранить проблему.

Ответ 6

Это немного смутило меня, когда я отлаживал службу локально, я запускал File.Exists( "U:\dir1" ) в отношении местоположения сервера, отображаемого на моей рабочей станции, как (U:). Я заменил U:\dir1 на "\\ serverPath\dir1", а File.Exists вернули значение true.

Ответ 7

Я тоже ломал голову над этим, а потом понял, что использую File.Exists, когда должен был использовать Directory.Exists.

Ответ 8

Я тоже это испытывал. В моем случае я удалял файл и воссоздавал его. В процессе, который удалял файл, я забыл добавить в WaitForExit() перед тем, как использовать File.Exists позже в

Ответ 9

System.IO.File.Exists(string path) вернул мне false при попытке прочитать C:\OpenSSL\bin\file.txt. Запуск приложения в режиме администратора не помог. (Я вошел в систему с учетной записью администратора, Windows 10) После того, как я переместил файл в C:\Users\MyUser\Desktop\file.txt, File.Exists() вернул true.

Ответ 10

Та же проблема, когда я пытаюсь получить доступ к файлу из-под моего домена "/Content/Images/1.jpg", он возвращал false. Когда я попытался указать полный путь (D:/{.. path}/Content/Images/1.jpg, он вернул true. :)

Ответ 11

Используйте\\вместо @. Например:

@ "C:\file.txt" → "C:\\file.txt"