Avatar billede martin_moth Mester
09. december 2003 - 15:58 Der er 14 kommentarer og
2 løsninger

Søg efter fil i alle subfolders

Jeg vil gerne søge efter alle filer *.txt filer i fx. c:\ inklusive alle underfoldere.

Alle filerne skal åbnes, og afhængigt af hvad der står i dem skal noget bestemt ske - men det skal jeg nok selv styre. Problemet er at søge alle undermapperne igennem.

Altså minder mit spørgsmål om www.eksperten.dk/spm/280026, men jeg vil gerne lave det uden API
Avatar billede sjh Nybegynder
09. december 2003 - 16:13 #1
Avatar billede martin_moth Mester
09. december 2003 - 16:14 #2
Faktisk vil jeg bare have læst alle *.txt filer på c:\ (og undermapper) smidt ind i en filelistbox

Pseudokode

Private sub FindFile(Pattern as String, ByVal StartFolder as String)
  If StartFolder Has SubFolders Then 
    For each SubFolder in StartFolder
      FindFile(Pattern, SubFolder) '< Rekursivt kald
    Next SubFolder
  Else
    For Each File in StartFolder
      If right(File.Name,4) = Pattern Then
        File1.Additem File.Name
      End If
    Next File
  End If
End Sub

Call FindFile ".txt", "C:\"

Er jeg ved at være der? Havde jeg VB6 lige her kunne jeg lige tjekke om det virker - der skal lige rettes lidt op, men med FSO må det være muligt...
Avatar billede martin_moth Mester
09. december 2003 - 16:17 #3
sjh: Ja, det link du giver står jo også i det spørgsmål jeg har linket til - men jeg vil gerne undgå 3 km kode og API - jeg tænkte med en rekursiv funktion kunne det gøres så simpelt som jeg skitserer ovenfor.

Måske skulle jeg bare vente til jeg kommet til min egen PC med VB6 på (før skal jeg alligevel ikke bruge koden ;o), for jeg tror jeg er meget tæt på at have løsningen ovenfor
Avatar billede sjh Nybegynder
09. december 2003 - 16:18 #5
okææ så skal du nok bruge det som martin_moth er kommet med :)
Avatar billede sjh Nybegynder
09. december 2003 - 16:21 #6
øøø martin_moth (Has) hvad er det???

--> If StartFolder Has SubFolders Then
Avatar billede martin_moth Mester
09. december 2003 - 16:22 #7
martin_moth er mig selv :o) Jeg stiller bare et spørgsmål og besvarer det (næsten) selv. Lidt skitzo er vi vel alle
Avatar billede sjh Nybegynder
09. december 2003 - 16:25 #8
ja det ser jeg... jeg må vist se at komme ind og sove lide :D
Avatar billede sjh Nybegynder
09. december 2003 - 17:17 #9
okææ så må det her være noget for dig.. den teller godt nok antal byte sammen, men det kan du nok selv ændre :o)

http://www.vb-helper.com/howto_find_directory_and_subdirectories_size.html
Avatar billede martin_moth Mester
09. december 2003 - 20:32 #10
Det jeg egentligt helst ville var at rette min pseudokode til så den fungerer...
Avatar billede martin_moth Mester
09. december 2003 - 20:34 #11
Fx:

If StartFolder Has SubFolders Then

Hvordan tjekker man det

If Startfolder.Subfolders = Null eller?
Avatar billede bak Forsker
09. december 2003 - 22:54 #12
Det kan vel ikke være noget så enkelt som det her du tænker på Martin :-)
Sub GetTextFiles()

Dim FS As FileSearch
Dim FilePath As String
Dim i As Integer
Dim filelist()
Const Filespec = "*.txt"  'udfyldes af bruger
FilePath = "C:\"          'udfyldes af bruger
Set FS = Application.FileSearch
With FS
  .LookIn = FilePath
  .Filename = Filespec
  .SearchSubFolders = True
  .Execute
  If .FoundFiles.Count = 0 Then
      MsgBox ("Ingen filer fundet")
      Exit Sub
  End If
  ReDim filelist(.FoundFiles.Count)
  For i = 1 To .FoundFiles.Count
    'filelist(i) = Split(.FoundFiles(i), Application.PathSeparator)
    filelist(i) = FoundFiles(i)
  Next
End With
End Sub
Avatar billede helmet Nybegynder
10. december 2003 - 09:38 #13
En anden måde det kunne gøre på.
Måtte rette din pseudo lidt til, for hvis der var en mappe med subfolders ville filerne i den mappe aldrig blive undersøgt.

Dim fso As Scripting.FileSystemObject
Set fso = New Scripting.FileSystemObject
FindFile pattern, fso.GetFolder(mappe)

Private Sub FindFile(pattern As String, folder As Scripting.folder)
Dim tmpFolder As Scripting.folder
Dim tmpFile As Scripting.File
  If folder.SubFolders.Count > 0 Then
    For Each tmpFolder In folder.SubFolders
      FindFile pattern, tmpFolder
    Next
  End If
  If folder.Files.Count > 0 Then
    For Each tmpFile In folder.Files
      If InStr(1, tmpFile.Name, pattern) Then
        Debug.Print tmpFile.Path & "\" & tmpFile.Name
      End If
    Next
  End If
End Sub
Avatar billede sjh Nybegynder
10. december 2003 - 09:49 #14
den virker jo fint :) skal bare ikke have --> & "\" & tmpFile.Name med..

Debug.Print tmpFile.Path '& "\" & tmpFile.Name
Avatar billede martin_moth Mester
10. december 2003 - 11:53 #15
sjh: Kendte ikke Set "FS = Application.FileSearch" - så er det jo nemt :o)

helmet: Jeg synes rekursive funktioner er seje - og du fik rettet mit eget forslag så det fungerer.

Jeg giver 30 til hver af jer hvis helmet smider et svar
Avatar billede helmet Nybegynder
10. december 2003 - 12:40 #16
Fair nok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester