Dateieigenschaften auslesen

Hallo,
ich habe die Aufgabe bekommen, via Access und VBA, aus einer ganzen Reihe von Dateien Eigenschaften wie z.B. Autor, Titel, Kommentar usw. auszulesen. Habe nach langem Suchen auch eine Möglichkeit gefunden. Die sieht in etwa so aus:

Dim objFolder As Object
Dim objShell As Object
Dim vFilename as string

Dim sAutor as string
Dim sKategorie as string
Dim sKommentar as string

Set objShell = CreateObject(„Shell.Application“)
Set objFolder = objShell.Namespace(CVar(„C:\Ordner“))

For Each vFilename In objFolder.Items
sAutor = objFolder.GetDetailsOF(CVar(vFilename), 9)
sKategorie = objFolder.GetDetailsOF(CVar(vFilename), 12)
sKategorie = objFolder.GetDetailsOF(CVar(vFilename), 14)
next

Set objShell = Nothing
Set objFolder = Nothing

Mein Problem bei dieser Lösung ist, dass ich mehr als 700 Dateien über ein Netzwerk auslesen muss. Jeder Zugriff mit GetDetailsOF auf eine datei kostet Zeit, und die Dauer der Auführung beträgt somit mehrere Minuten, was natürlich zu langsam ist.
Ich habe zwar herausgefunden, dass immer der erste Zugriff auf eine Datei am längsten braucht, und dass ein zweites mal einlesen aller Dateien auch nicht mehr so lange dauert, da sich die Shell zu merken scheint, auf was sie zuletzt zugegriffen hat. Das hilft aber auch nicht wirklich.
Da das Einlesen von Dateieigenschaften überall so wahnsinnig gut dokumentiert ist, konnte ich bis jetzt noch nicht herausfinden, ob es überhaupt noch eine weitere Möglichkeit gibt die Eigenschaften einzulesen, oder ob die Shell vielleicht noch weitere Befehle außer GetDetailsOF bietet mit der z.B. die kompletten Eigenschaften als ein Array zurückgeliefert werden können. (Der Windows Explorer benutzt diese DLL (system32/shell32.dll) ja auch und braucht keine 5 min um die Dateien mit Eigenschaften anzuzeigen).
Wäre echt toll, wenn mir da jemand helfen könnte.

mfg
Christian

Hallo Christian,

via Access und VBA

Ich hoffe nur, weil kein VB6 zur Hand! In Access gibt es nämlich auch die Datenbankeigenschaften, die von den Dateieigenschaften unabhängig sind!
Mit deinem Source liest du jedenfalls die Dateieigenschaften.

Für die Datenbankeigenschaften könnte vieleicht das helfen:
http://www.microsoft.com/downloads/details.aspx?Fami…

Mein Problem bei dieser Lösung ist, dass ich mehr als 700
Dateien über ein Netzwerk auslesen muss.

Dein Code ist Eigentlich ok, benutze für sowas auch die Windows-Shell.
Das Problem liegt wohl am Netzwerk. Bei jedem Zugriff auf eine Datei prüft Windows vorher so alles mögliche. Und wenn du 700 Dateien in einem Netzwerk-Ordner anzeigst kann das doch auch ewig dauern oder? Man konnte da mal irgendwas abstellen, um Netzwerkzugriffe zu beschleunigen…

Wäre echt toll, wenn mir da jemand helfen könnte.

Tja, was konkretes kann ich dir leider auch nicht sagen aber vieleicht ist das ja ein Anhaltspunkt wonach du suchen könntest.

mfg
Phil

Für die Datenbankeigenschaften könnte vieleicht das helfen:
http://www.microsoft.com/downloads/details.aspx?Fami…

Sorry, der Link lautet:
http://www.microsoft.com/downloads/details.aspx?Fami…

Hallo Phil, danke für die schnelle Antwort.
Ich soll in ein bestehendes Warenwirtschaftssystem, eine Funktion einbauen, die die Eigenschaften aus exe Dateien auslesen soll.
Diese EXE Dateien sind kleine Präsentationen zum erklären des Programms.
Also helfen mir Datenbank-Eigenschaften leider auch nicht weiter.

Klar, dass das Auslesen der Eigenschaften über Netzwerk länger dauert, als wenn die Dateien auf der Platte liegen. Wir werden wohl auch noch andere Verbreitungsmöglichkeiten wie CD o.ä. nutzen. Da aber die einzelnen Kunden eigene Server haben, die als gemeinsame Datenbasis ihrer Märkte dienen, wäre es eben die einfachste und Speicherplatz sparendste Möglichkeit gewesen, die EXE Dateien auf den Server zu kopieren.

Die Zugriffszeit macht sich deshalb im Netzwerk so bemerkbar, weil bei jedem Zugriff auf eine Eigenschaft eine Nachricht durchs Netz geschickt wird. Es muß doch auch eine Möglichkeit geben, sich auch einen Schlag das gesamte Eigenschaften Array zurückliefern zu lassen o.ä… Das müsste doch die ganze Sache schon erheblich beschleunigen.

mfg
Christian

Hallo,

ich denke mal mit den API-Calls:
FindFirstFile
FindNextFile
GetFileInformationByHandle

duerftest du etwas schneller sein, als mit der Shell.

Tschau
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo, danke für die Antwort.
Ich habe für GetFileInformationByHandle nur Beispiele gefunden, mit denen man die Schreibrechte, Letzter Zugriff usw. auslesen kann, aber nichts darüber, wie man Autor, Titel Kommentar ausliest. Geht das überhaupt damit? Wenn ja wie?

Gruß
Christian

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Christian,

Also helfen mir Datenbank-Eigenschaften leider auch nicht
weiter.

Ok, dann bist du ja doch auf dem richtigen Weg.

BadPhil schrieb:

Man konnte da mal irgendwas abstellen, um Netzwerkzugriffe
zu beschleunigen…

Habs gefunden:
http://www.nesehe.de/Seiten/Computerwissen/wxp/wxp_s…

Dann als Code einfach:

Sub GetProperties()
 Dim KeyExist as Boolean
 Dim KeyValue as String

 If RegRead("HKLM/...") "" Then
 KeyValue = RegRead("HKLM/...")
 RegDelete "HKLM/..."
 KeyExist = True
 End If

 'Eigenschaften Lesen...

 If KeyExist Then
 RegWrite "HKLM/...", KeyValue
 End If
End Sub 

(Hoffe die Änderungen werden nicht erst nach nem Neustart wirksam, sonst müsstest du dir überlegen, den Schlüssel generell zu entfernen.)

lg Phil