Ich verwende die Windows-API-Funktion FindFirstFileEx , weil sie die Funktion bereitstellt Fähigkeit, nur die Unterverzeichnisse eines bestimmten Verzeichnisses zurückzugeben (Dateien zu ignorieren). Wenn ich diese Funktion jedoch mit dem erforderlichen Flag aufrufen, erhalte ich immer noch sowohl Dateien als auch Verzeichnisse.
Die MSDN-Dokumentation für das FindExSearchLimitToDirectories -Flag, das von FindFirstFileEx verwendet wird, besagt:
Dies ist eine Beratungsflagge. Wenn die Datei System unterstützt Verzeichnisfilterung, Die Funktion sucht nach einer Datei, die entspricht dem angegebenen Namen und ist auch ein Verzeichnis. Wenn das Dateisystem dies tut Directory-Filtering nicht unterstützen, dies Flag wird still ignoriert.
Der lpSearchFilter-Parameter von Die FindFirstFileEx-Funktion muss NULL sein wenn dieser Suchwert verwendet wird.
Wenn Verzeichnisfilterung gewünscht ist, Dieses Flag kann für alle Dateien verwendet werden Systeme, sondern weil es eine Beratung ist Flag und betrifft nur Dateisysteme das unterstütze es, muss die Anwendung Untersuchen Sie die gespeicherten Dateiattributdaten im Parameter lpFindFileData von FindFirstFileEx-Funktion zum Bestimmen ob die Funktion eine zurückgegeben hat Handle zu einem Verzeichnis.
Welche Dateisysteme unterstützen dieses Flag? Es wäre also sinnvoll gewesen, diese unterstützten Dateisysteme auf derselben Seite aufzulisten, aber ich kann sie nicht finden.
Mein Entwicklungssystem ist Windows XP SP3, NTFS, .NET 3.5.
Ich weiß, dass ich Dateiattribute überprüfen kann, um festzustellen, ob es sich bei einer Datei um ein Verzeichnis handelt, dies bedeutet jedoch, dass jede Datei / jedes Verzeichnis überprüft wird. Es vereitelt auch den Zweck der Verwendung von FindFirstFileEx an erster Stelle.
Natürlich besteht immer noch die Möglichkeit, dass ich in meinem Code etwas falsch mache. Das einzige, was ich sehen kann, ist das Übergeben von IntPtr.Zero an lpSearchFilter ist möglicherweise nicht dasselbe wie das Übergeben von NULL (wie im Zitat erwähnt).
Hier ist ein Beispiel für den Code, den ich verwende:
%Vor%Der nächste Link, den ich finden konnte, war die Liste der Systemaufrufe von Metasploit ... ich Ich nehme hier einen Stich, aber ich würde mir vorstellen, dass 'FindFirstFileEx' irgendwie ein indirekter Aufruf des NT-Systemaufrufs sein würde, äquivalent 'NtOpenDirectoryObject', 'NtQueryDirectoryFile', 'NtQueryDirectoryObject' ... ich hoffe ... wenn jemand denkt, ich ' m falsch und downvotes zu widersprechen, werde ich von wem auch immer widersprochen werden:)
Allerdings habe ich hier ein paar Links getroffen
Bearbeiten: Gerade jetzt, nachdem ich in den Kommentaren erwähnt habe, dachte ich, dass es passend wäre, einen Link zu dem Linux NTFS-Treiber für die Fähigkeit, die NTFS-Partition zu lesen, wird es sicher sein, Quellversionsänderungen zu sein, um die verschiedenen NTFS-Versionen zu berücksichtigen, die zu Win2000 zurückgehen ...
Hoffe, das hilft, Freundliche Grüße, Tom.
Tags und Links .net c# winapi filesystems