Файл C#.Exists возвращает false, файл существует
использование VS 15, C# с .Net 4.5.2
Компьютер находится в рекламной сети, с именем объявления "AD".
Эта проблема возникает с правами обычного пользователя AD, правами администратора AD и правами локального администратора. Не имеет значения, какие права получает программа, возникает та же проблема.
наш тестовый файл "C:/windows/system32/conhost.exe".
Файл выше существует, он очень существует. Я вижу это с помощью explorer.
вы можете видеть, что это там, не так ли?
Следующая команда cmd проверяет, существует ли файл:
IF EXIST "C:windowssystem32conhost.exe" (echo does exist) ELSE (echo doesnt exist)
возвращает "существует
следующий код C# проверяет, существует ли файл: это возвращает "False". этот код также возвращает "False": этот код также не находит его: этот код также не находит его: Ложь, Ложь, Ложь: что я делаю не так?FileInfo file = new FileInfo("C:/windows/system32/conhost.exe");
MessageBox.Show(file.Exists + "");
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
}
MessageBox.Show(File.Exists("C:/windows/system32/conhost.exe") + "");
MessageBox.Show(File.Exists("C:windowssystem32conhost.exe") + "");
MessageBox.Show(File.Exists(@"C:windowssystem32conhost.exe") + "");
Дополнительное примечание: Я скопировал conhost в C:conhost - ... exe, а моя программа может найти без проблем. Моя программа также находит другие файлы в system32, просто не conhost и несколько других. Например, он находит "подключиться.dll", который находится в system32, так что это не разрешение на чтение каталога.
Дополнительные примечания: conhost.exe и подключиться.DLL имеет те же атрибуты безопасности (вкладка Безопасность в свойствах файла).
2 ответов
Если вы используете систему x64, у вас будет другое содержимое c:\Windows\System32 каталог для x86 и x64 приложений. Убедитесь, что вы используете ту же архитектуру, что и пакетный файл, и приложение C#.
в документации MSDN для Система.ИО.Файл.Существует (путь), в нем говорится:
Если вызывающий абонент делает не имеют достаточных разрешений для чтения указанного файла, нет исключение и метод возвращает значение false, независимо от существование пути.
по этой причине мы можем с уверенностью предположить, что ваше приложение не имеет доступа для чтения этого конкретного файла. Проверьте параметры безопасности и предоставьте доступ для чтения, если нет уже сделал.
создайте приложение (в режиме выпуска) и запустите его от имени администратора.

