Avatar billede tommeltot Nybegynder
03. januar 2005 - 20:17 Der er 5 kommentarer og
1 løsning

List alle filer i drev

Jeg vil lave et program hvor man kan finde alle filer på et drev så hvis man nu har glemt hvad en fil hedder eller hvor den er så behøves man ikke at gå alle mapper igennem, men man kan bare kigge på listen over ens filer. Hvis der er nogle der har ideer til hvordan koden skal være må de gerne hjælpe mig for jeg er på bar bund.
Avatar billede joern Nybegynder
03. januar 2005 - 20:48 #1
Hej.

Windows har jo indbygget sådan en funktion.  Skal det indgå i et større projekt eller vil du bare øve dig?  Har du prøvet 'Ekspertens' søgefunktion?  Jeg har lige taget et kig, se f.eks. http://eksperten.dk/spm/437836  Der er mange flere der handler om emnet.

M.v.h. Jørn
Avatar billede tommeltot Nybegynder
03. januar 2005 - 21:05 #2
Det er mere bare for at øve mig på vb.
Avatar billede martin_moth Mester
05. januar 2005 - 15:51 #3
Start VB
Smid en knap på din form, der skal hedde "command1"
Smid en listbox på din form, der skal hedde "List1"
Copy-paste nedenstående kode
Under Project > References, tilføjer du 'Micosoft Scripting Runtime"

Koden:

Private Sub Command1_Click()
  Dim fso As Scripting.FileSystemObject
  Set fso = New Scripting.FileSystemObject
  FindFile fso.GetFolder("c:\temp") 'Ret evt. til "c:\", "c:\dokumenter" e.l.
End Sub

Private Sub FindFile(folder As Scripting.folder)
  Dim tmpFolder As Scripting.folder
  Dim tmpFile As Scripting.file
  List1.Clear
  If folder.SubFolders.Count > 0 Then
    For Each tmpFolder In folder.SubFolders
      FindFile tmpFolder  '< proceduren kalder sig selv (dvs. rekursiv)
    Next
  End If
  If folder.Files.Count > 0 Then
    For Each tmpFile In folder.Files
      List1.AddItem tmpFile.Name
    Next
  End If
End Sub


Ovenstående er rekursiv, og du skal nok lige sætte dig ned og prøve at forstå hvad der sker, når sub'ben kalder sig selv igen og igen. Det er ikke helt så enkelt som "almindelige" funktioner og procedurer. Men ovenstående gør præcis hvad du ønsker
Avatar billede martin_moth Mester
05. januar 2005 - 15:57 #4
UPS - fejl i koden. Slet linien List1.Clear, og flyt den op i den anden sub. Altså:

Private Sub Command1_Click()
  Dim fso As Scripting.FileSystemObject
  Set fso = New Scripting.FileSystemObject
  List1.Clear
  FindFile fso.GetFolder("c:\temp") 'Ret evt. til "c:\", "c:\dokumenter" e.l.
  msgbox "Slut"
End Sub

Private Sub FindFile(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 tmpFolder  '< proceduren kalder sig selv (dvs. rekursiv)
    Next
  End If
  If folder.Files.Count > 0 Then
    For Each tmpFile In folder.Files
      List1.AddItem tmpFile.Name
    Next
  End If
End Sub

OG skriv nu ikke "C:\temp" i første omgang - det kan tage laaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaang tid at tælle alle filer. Start med et forsøg, f.eks. c:\temp, hvis der ikke er så mange filer der
Avatar billede martin_moth Mester
05. januar 2005 - 16:01 #5
Alle gode gange tre:

OG skriv nu ikke "C:\" i første omgang - det kan tage laaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaang tid at tælle alle filer. Start med et forsøg, f.eks. c:\temp, hvis der ikke er så mange filer der
Avatar billede tommeltot Nybegynder
15. januar 2005 - 08:52 #6
Tak for hjælpen
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

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