Как найти все файлы, в том числе скрытые и системные файлы - PullRequest
4 голосов
/ 25 июля 2011

Мне нужно создать полный список файлов и подкаталогов в каталоге.

DirectoryInfo.GetFiles() НЕ находит все файлы;скрытые файлы, как минимум, отсутствуют.

(Могут также быть проблемы с разрешениями, поскольку я не могу заглянуть в некоторые каталоги с помощью проводника Windows, даже если я работаю от имени администратора.Например, «C: \ System Volume Information» не может быть введен.)

Я использую C #, Windows XP Pro

Ответы [ 5 ]

7 голосов
/ 25 июля 2011

DirectoryInfo.GetFiles() возвращает все файлы (кроме тех, которые у вас нет прав на просмотр).

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

У вас есть конкретный пример файла, который появляется в другом месте, но отсутствует в этом списке?

3 голосов
/ 20 июля 2013

При взвешивании в этот поздний срок GetFiles не всегда возвращает все файлы, и я также не выяснил, почему.Вот один из способов воспроизведения (по крайней мере, на 64-битной Windows 7 Home, работающей от имени администратора и использующей C # с Visual Studio 2010).

Установите программу установки драйверов FTDI EXECUTABLE из здесь (http://www.ftdichip.com/Drivers/D2XX.htm)

Это установит следующие файлы в \ Windows \ System32:

-ftbusui.dll
-ftcserco.dll
-ftd2xx.dll
-FTLang.dll
-ftserui2.dll

Следующий код:

String[] files = Directory.GetFiles(Environment.SystemDirectory, "f*.*", SearchOption.TopDirectoryOnly);

возвращает ftd2xx.dll, но неостальные четыре файла.

Изменение searchPattern на *. * или простое использование:

GetFiles(Environment.SystemDirectory)

возвращает ftd2xx.dll, но не остальные четыре файла.

Ни один из файлов не скрыт, и все пять имеют одинакового владельца и разрешения. Все пять файлов отображаются в проводнике Windows и в окне командной строки.

Фактически, следующее возвращает false:

File.Exists(@"c:\Windows\System32\ftbusui.dll")

и четыре файла не отображаются в диалоге OpenFileDialog. Запуск исполняемого файла с правами администратора не имеет значения, а отключение UAC не помогает.

2 голосов
/ 25 июля 2011

DirectoryInfo.GetFiles() возвращает все файлы, включая скрытые.

2 голосов
/ 25 июля 2011

Должен. Попробуйте выполнить поиск в другом каталоге, создайте скрытый вручную файл и посмотрите, будет ли он в результатах поиска.

1 голос
/ 25 июля 2011

Как отмечают другие, DirectoryInfo.GetFiles() получает все файлы.Таким образом, похоже, что вы можете столкнуться с проблемой разрешения.

...