Hallo komma4 - Danke erst mal für die schnelle Antwort.
komma4 hat geschrieben:Ich bin mir sicher, dass es eine Unzahl von Webseiten mit BASIC-Lösungen zur rekursiven Bearbeitung von Verzeichnisbäumen gibt.
... zum Einlesen eines Verzeichnissbaums gibt's in Dannis Lib schon seit langem eine ganz gute Prinziplösung:
Code: Alles auswählen
Function ReadDir(FileList(), z, sRootPath) As Integer
' Thanks to Michael Dannenhoefer ( http://www.starbasicfaq.de/index.html)
Dim i As Integer, sRootUrl As String, sCrntPath As String, oSfA As Object, aPathContent()
sRootUrl = ConvertToUrl(sRootPath)
oSfA = createUnoService("com.sun.star.ucb.SimpleFileAccess")
aPathContent = oSfA.getFolderContents(sRootUrl, True)
For i = LBound(aPathContent) To UBound(aPathContent)
sCrntPath = aPathContent(i)
If oSfA.isFolder(sCrntPath) Then
ReadDir(FileList(), z, sCrntPath)
Else
FileList(z) = sCrntPath
z = z + 1
EndIf
Next i
ReadDir = z
End Function
... problematisch dabei sind allerdings weit verschachtelte Unterverzeichnisse: wendet man Dannis Routine z.B. auf dem Rootverzeichnis des Systemlaufwerks an, erlebt man sein blaues Wunder!! Hier muß man eine "Bremse" einbauen, die zunächst nur 1 Ebene höher einliest sonst wird nämlich der Inhalt der gesamten Festplatte aufgelistet!
Ich möchte einfach nur mit einer kurzen Routine feststellen, wieviele Dateien sich im nächst höheren Verzeichnis befinden. Wie oben im meinem Thread schon beschrieben, führt die Methode über "getFolderContents" zu endlosen Wartezeiten, wenn der betreffende Ordner knall-voll ist (ab 1000 Dateien).
komma4 hat geschrieben:Arbeitest Du mit Windows.... könntest Du diese Befehlskette auch mit dem
cygwin Tool nutzen
... mea maxima culpa: ich hätte natürlich direkt angeben sollen, daß ich unter WinXP arbeite - 'tschuldijung!
komma4 hat geschrieben:Hilft das weiter?
... nicht wirklich - ich hatte schon mal vor längerer Zeit mit Cygwin herumgespielt um eine KDE-Oberfläche unter Windows zu simulieren - ging nach leider hinten los. Da wir hier von zeitkritischen Prozessen reden, kann ich mir auch nicht vorstellen, daß eine via Cygwin um 3 Ecken simulierte Linux-Funktion wirklich schnell sein kann!
Aber Du hast mich auf eine Idee gebracht: Windows hat ja auch Millionen APIs - da muß es doch Entsprechendes geben. Wobei sich für mich aber direkt die nächste Frage auftut: Kennt Jemand auf Anhieb eine entsprechende Windows-API und wie startet man diese unter OO? Win-APIs habe ich bisher nur mit VBA benutzt.
Am coolsten wäre natürlich eine platform-unabhängige OO-Lösung - hat vielleicht noch Jemand eine Idee?
Gruß: ejomi
Hallo komma4 - Danke erst mal für die schnelle Antwort.
[quote="komma4"]Ich bin mir sicher, dass es eine Unzahl von Webseiten mit BASIC-Lösungen zur rekursiven Bearbeitung von Verzeichnisbäumen gibt.[/quote]
... zum Einlesen eines Verzeichnissbaums gibt's in Dannis Lib schon seit langem eine ganz gute Prinziplösung:
[code]Function ReadDir(FileList(), z, sRootPath) As Integer
' Thanks to Michael Dannenhoefer ( http://www.starbasicfaq.de/index.html)
Dim i As Integer, sRootUrl As String, sCrntPath As String, oSfA As Object, aPathContent()
sRootUrl = ConvertToUrl(sRootPath)
oSfA = createUnoService("com.sun.star.ucb.SimpleFileAccess")
aPathContent = oSfA.getFolderContents(sRootUrl, True)
For i = LBound(aPathContent) To UBound(aPathContent)
sCrntPath = aPathContent(i)
If oSfA.isFolder(sCrntPath) Then
ReadDir(FileList(), z, sCrntPath)
Else
FileList(z) = sCrntPath
z = z + 1
EndIf
Next i
ReadDir = z
End Function[/code]
... problematisch dabei sind allerdings weit verschachtelte Unterverzeichnisse: wendet man Dannis Routine z.B. auf dem Rootverzeichnis des Systemlaufwerks an, erlebt man sein blaues Wunder!! Hier muß man eine "Bremse" einbauen, die zunächst nur 1 Ebene höher einliest sonst wird nämlich der Inhalt der gesamten Festplatte aufgelistet!
Ich möchte einfach nur mit einer kurzen Routine feststellen, wieviele Dateien sich im nächst höheren Verzeichnis befinden. Wie oben im meinem Thread schon beschrieben, führt die Methode über "getFolderContents" zu endlosen Wartezeiten, wenn der betreffende Ordner knall-voll ist (ab 1000 Dateien).
[quote="komma4"]Arbeitest Du mit Windows.... könntest Du diese Befehlskette auch mit dem [url=http://www.cygwin.com]cygwin[/url] Tool nutzen[/quote]
... mea maxima culpa: ich hätte natürlich direkt angeben sollen, daß ich unter WinXP arbeite - 'tschuldijung!
[quote="komma4"]Hilft das weiter?[/quote]
... nicht wirklich - ich hatte schon mal vor längerer Zeit mit Cygwin herumgespielt um eine KDE-Oberfläche unter Windows zu simulieren - ging nach leider hinten los. Da wir hier von zeitkritischen Prozessen reden, kann ich mir auch nicht vorstellen, daß eine via Cygwin um 3 Ecken simulierte Linux-Funktion wirklich schnell sein kann!
Aber Du hast mich auf eine Idee gebracht: Windows hat ja auch Millionen APIs - da muß es doch Entsprechendes geben. Wobei sich für mich aber direkt die nächste Frage auftut: Kennt Jemand auf Anhieb eine entsprechende Windows-API und wie startet man diese unter OO? Win-APIs habe ich bisher nur mit VBA benutzt.
Am coolsten wäre natürlich eine platform-unabhängige OO-Lösung - hat vielleicht noch Jemand eine Idee?
Gruß: ejomi