2010-04-09 4 views
7

Я хотел бы узнать, можно ли перечислять файлы в C#, возможно, используя Win32API. Это легко сделать для окон и обработчиков процессов, но, похоже, это невозможно для дескрипторов файлов.Перечисление файлов в C#

Хотя некоторые функции предлагаются NtQuerySystemInformation, это постепенно прекращается, и поэтому не рекомендуется использовать такой метод.

+0

Возможный дубликат http://stackoverflow.com/questions/231547/tracing-which-process-that-has-opened-a-particular-file –

ответ

0

Вы можете вызвать SysInternal-х Handle и анализировать результат, или написать file system driver (может быть взаимодействие многих человек года и can't be done in C#) в

7

Ну, вы знаете, что это возможно, Handle утилита Sysinternals' это делает. NtQueryInformation не будет отменена, это важный низкоуровневый интерфейс между Win32 и «реальной» операционной системой.

Что никогда не произойдет, так это то, что аргументы NtQueryInformation, которые позволяют выполнять итерационные дескрипторы, будут задокументированы. Поскольку это не останавливается, некоторые muppet будет использовать его для вызова CloseHandle() в файле, который он/она не хочет блокировать. Который очень хороший способ уничтожить содержимое вашего жесткого диска.

Процесс, которому принадлежит ручка, не знает, что ручка закрыта. Он просто будет писать на него, возможно, полностью игнорируя код возврата «не работает» от WriteFile(). Это безобидно, пока программа не откроет другой дескриптор, получив то же значение, что и ранее закрытое. Теперь он начинает писать смесь мусора (предназначенного для предыдущего дескриптора) и новые данные для дескриптора. Совершенно уничтожая содержание того, что он пишет. Скопируйте резервные ленты, если это что-то вроде критически важной базы данных.

0

я нашел рабочий пример листинга дескрипторов файлов с именами в C# здесь ...

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ac990847-6d04-4ae0-aafe-8355bbc3f769

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

+0

Ссылка на этот адрес не работает. – mg30rg