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