System.IO.File.Exists(string path)
возвращает всегда false, даже если файл существует по указанному пути. Каким может быть возможное решение?
System.IO.File.Exists(string path)
возвращает всегда false, даже если файл существует по указанному пути. Каким может быть возможное решение?
Это может быть проблема разрешения. Из документа :
Метод Exists возвращает false, если возникает какая-либо ошибка при попытке определить, существует ли указанный файл. Это может происходить в ситуациях, которые вызывают исключения, такие как передача имени файла с недопустимыми символами или слишком много символов, сбой или отсутствующий диск или если у вызывающего устройства нет разрешения на чтение файла.
Один из способов увидеть, что происходит, - просто попытаться прочитать файл (например, с помощью File.OpenRead
). Я был бы удивлен, если это удастся - но если это не удается, исключение должно предоставить вам больше информации.
Скрытие окончаний файлов в окнах иногда может вызвать путаницу: вы знаете, что ваш файл имеет имя file.txt, когда он фактически называется file.txt.txt, потому что последние 4 символа были скрыты ОС.
Одна из возможностей, не упомянутая ни в одном из ответов, это "Перенаправление файловой системы" в Windows 8.1 и более поздних версиях.
Например, если ваша программа является 32-битным приложением и вы работаете в 64-битной Windows, то попытка доступа к% windir%\System32 будет перенаправлена на% windir%\SysWOW64. И если файл, к которому вы пытаетесь получить доступ, не существует в% windir%\SysWOW64, тогда System.IO.File.Exists (путь к строке) вернет значение False.
Как я обошел это, использовал Server.MapPath(fileName)
, поскольку он пытался найти файл где-то еще.
System.IO.File.Exists(Server.MapPath(string path))
в моем случае возникает другая "тире" в имени файла.
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
используйте тот же "-", чтобы устранить проблему.
Это немного смутило меня, когда я отлаживал службу локально, я запускал File.Exists( "U:\dir1" ) в отношении местоположения сервера, отображаемого на моей рабочей станции, как (U:). Я заменил U:\dir1 на "\\ serverPath\dir1", а File.Exists вернули значение true.
Я тоже ломал голову над этим, а потом понял, что использую File.Exists, когда должен был использовать Directory.Exists.
Я тоже это испытывал. В моем случае я удалял файл и воссоздавал его. В процессе, который удалял файл, я забыл добавить в WaitForExit()
перед тем, как использовать File.Exists
позже в
System.IO.File.Exists(string path) вернул мне false при попытке прочитать C:\OpenSSL\bin\file.txt
. Запуск приложения в режиме администратора не помог. (Я вошел в систему с учетной записью администратора, Windows 10) После того, как я переместил файл в C:\Users\MyUser\Desktop\file.txt
, File.Exists() вернул true.
Та же проблема, когда я пытаюсь получить доступ к файлу из-под моего домена "/Content/Images/1.jpg", он возвращал false. Когда я попытался указать полный путь (D:/{.. path}/Content/Images/1.jpg, он вернул true. :)
Используйте\\вместо @. Например:
@ "C:\file.txt" → "C:\\file.txt"