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

С# File.Exists возвращает false, файл существует

Использование VS 15, С# с .Net 4.5.2
Компьютер находится в сети AD с именем объявления "AD".
Эта проблема возникает с правами обычного пользователя AD, правами администратора AD и правами локального администратора. Неважно, какие права получает программа, возникает та же проблема.

Наш тестовый файл " C:/windows/system32/conhost.exe".
Файл выше существует, он очень существует. Я вижу это с исследователем.

Это файл в проводнике:
введите описание изображения здесь

Это свойства файла:
введите описание изображения здесь

Вы можете видеть, что он есть, верно?
Следующая команда cmd проверяет, существует ли файл:

IF EXIST "C:\windows\system32\conhost.exe" (echo does exist) ELSE (echo doesnt exist)

Он возвращает " существует", как и было обещано.

Следующий код С# проверяет, существует ли файл:

FileInfo file = new FileInfo("C:/windows/system32/conhost.exe");
MessageBox.Show(file.Exists + "");

Это возвращает " False".

Этот код также возвращает " False":

MessageBox.Show(File.Exists("C:/windows/system32/conhost.exe") + "");

Этот код также не находит его:

foreach (string file in Directory.GetFiles("C:/windows/system32/"))
{
    //conhost is NEVER mentioned, like it doesn't exist
}

Этот код также не находит его:

foreach (string file in Directory.EnumerateFiles("C:/windows/system32/"))
{
    //conhost is NEVER mentioned, like it doesn't exist
}

False, False, False:

MessageBox.Show(File.Exists("C:/windows/system32/conhost.exe") + "");
MessageBox.Show(File.Exists("C:\\windows\\system32\\conhost.exe") + "");
MessageBox.Show(File.Exists(@"C:\windows\system32\conhost.exe") + "");

Что я делаю неправильно?
Дополнительное примечание: я скопировал conhost в C:\conhost.exe, и моя программа может найти это без проблем. Моя программа также находит другие файлы в system32, просто не conhost и несколько других. Например, он находит "connect.dll", который находится в system32, так что это не разрешение на чтение каталога.
Дополнительные примечания: conhost.exe и connect.dll имеют одинаковые атрибуты безопасности (вкладка "Безопасность" в свойствах файла).

4b9b3361

Ответ 1

Если вы используете систему x64, у вас будет разное содержимое каталога c:\Windows\System32 для приложений x86 и x64. Убедитесь, что вы используете ту же архитектуру, в которой запущен командный файл и ваше приложение С#.

Ответ 2

В документации MSDN для System.IO.File.Exists(путь) указано:

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

По этой причине мы можем с уверенностью предположить, что ваше приложение не имеет доступа для чтения к этому конкретному файлу. Проверьте настройки безопасности и предоставите доступ для чтения, если это еще не сделано.

Создайте приложение (в режиме выпуска) и запустите его как администратора.

Ответ 3

Это проблема, возникающая в 64-битной операционной системе... вот обходной путь,

перейдите в свойства проекта> щелкните вкладку сборки> снимите флажок Предпочитать 32-битный

после этого он должен корректно работать на 64-битной ОС.