Seite 1 von 1
[gelöst] In den Unterordnern nach den Dateien suchen.
Verfasst: Mo, 27.03.2006 17:50
von fichte.buche
Hallo,
Ich sollte in alle Unterordner gewisse Dateien suchen.
Wollte dies folgendermaßen machen
Code: Alles auswählen
Unterpfad = Dir("c:\test\", 16)
While Unterpfad <> ""
Datei = Dir("c:\test\"& Unterpfad &"\", 0)
While Datei <> ""
Code = Code & Chr(13) & Datei
Datei = Dir
Wend
Unterpfad = Dir
Wend
msgbox Code
Leider wird dabei der Ordner "c:\test\" durchsucht und nicht die gewünschten Unterordner.
Ich vermute, daß es daran liegt, daß ich für das Suchen der Dateien und der Unterordner "Dir" verwende. Aber was kann ich hier sonst verwenden?
Vielen Dank
Schorsch
Verfasst: Mo, 27.03.2006 23:33
von ykcim
Hi,
es geht nicht. Mir Dir$ lassen sich keine Unterverzeichnisse einlesen.
Du kannst aber die Verzeichnisse auslesen und selber in Unterverzeichnisse wechseln.
Ich habe dafür mal eine Lösung geschrieben. Ich kann morgen im Büro danach schauen.
mfg
Michael
Verfasst: Mi, 29.03.2006 09:14
von fichte.buche
Danke Michael,
Hab so einiges durchgelesen über das Thema durchsuchen von Unterordnern, aber bin noch nicht fündig geworden. Kannst du mit bitte einen Denkanstoß geben, wie ich so etwas vielleicht aussehen könnte?
Danke
mfg
Schorsch
Verfasst: Mi, 29.03.2006 09:36
von pmoegenb
Hallo Schorsch,
für Unterverzeichnisse ist von SUN folgender Code als Beispiel im neuesten StarBasic-Handbuch aufgeführt:
Code: Alles auswählen
Sub ShowDirs
Dim NextDir As String
Dim AllDirs As String
AllDirs = ′′
NextDir = Dir(′C:\′, 16)
While NextDir <> ′′
AllDirs = AllDirs & Chr(13) & NextDir
NextDir = Dir
Wend
MsgBox AllDirs
End Sub
Verfasst: Mi, 29.03.2006 12:54
von ykcim
@Schorsch
Ich habe die Lösung, die ich mal verwendet habe, gefunden.
Code: Alles auswählen
Sub DirSubs
Dim liste(10000) as string
z=0
sFolder = "F:\"
sFolderUrl = ConvertToUrl( sFolder )
oSimpleFileAccess = createUnoService( "com.sun.star.ucb.SimpleFileAccess" )
aFolders = oSimpleFileAccess.getFolderContents( sFolderUrl,true )
For i = LBound( aFolders ) To UBound( aFolders )
sFile = aFolders( i )
If oSimpleFileAccess.isFolder( sFile ) Then
subfolders=oSimpleFileAccess.getFolderContents( sfile,true )
For i1 = LBound( subFolders ) To UBound( subFolders )
subFile = subFolders( i1 )
If oSimpleFileAccess.isFolder( subFile ) Then
sub2folders=oSimpleFileAccess.getFolderContents( subfile,true )
For i2 = LBound( sub2Folders ) To UBound( sub2Folders )
sub2File = sub2Folders( i2 )
liste(z)=sub2file
z=z+1
Next i2
else
liste(z)=subfile
z=z+1
end if
next i1
Else
liste(z)=sfile
z=z+1
end if
next i
For i=0 to z-1
msgbox liste(i)
next i
End Sub
Das geht bis zu zur zweiten Ebene. Hat mir damals gelangt. Weitere Ebenen müssen nur eingefügt werden.
mfg
Michael
Verfasst: Mi, 29.03.2006 13:00
von ykcim
Hallo Peter
pass bitte auf wenn Du Code aus dem neuen StarBasic Handbuch hier kopierst. In dem ganzen Dokument stehen dummerweise statt doppelten Hochkomma nur einfache Hochkomma.
Wenn sich jemand den Code rauskopiert geht dann der Code nicht sofort.
mfg
Michael
Verfasst: Do, 30.03.2006 14:22
von ykcim
Hi,
ich habe das ganze noch verbessert.
Code: Alles auswählen
sub testdir
dim liste(10000) as string
m=getdirs(liste(),0,"c:\programme")
For i=0 to m-1
' msgbox liste(i)
next i
msgbox m
end sub
function getdirs( liste(),z, folder) as integer
sFolderUrl = ConvertToUrl( Folder )
oSimpleFileAccess = createUnoService( "com.sun.star.ucb.SimpleFileAccess" )
aFolders = oSimpleFileAccess.getFolderContents( sFolderUrl,true )
For i = LBound( aFolders ) To UBound( aFolders )
sFile = aFolders( i )
If oSimpleFileAccess.isFolder( sFile ) Then
getdirs( liste(),z, sFile)
Else
liste(z)=sfile
z=z+1
end if
next i
getdirs=z
end function
Durch die Rekursion ist jetzt die Tiefe der Unterordner egal, bzw hängt vom BS ab.
mfg
Michael
Danke
Verfasst: Mi, 12.04.2006 17:49
von fichte.buche
Danke Michael,
Es funktioniert wunderbar. Jetzt werde ich mich daran machen, daß ich das Makro auch verstehe, denn hier sind Sachen enthalten die ich bislang noch nicht kannt.
Viele Grüße
Schorsch