Durchsuchen von Ordnern in Quickbasic
lima-city → Forum → Programmiersprachen → Basic
bestimmten ordner
datei
dateiname
deklaration
ergebnisliste
error
exit
formen
gen
letzte speicherung
letzter zugriff
modul
not
ordner
parameter
preserve
prozedur
resume
verzeichnis
wildcard
-
Hey ich brauche mal wieder eure Hilfe in Quickbasic:
Wie kann man dem Programm sagen, dass er einen bestimmten Ordner durchsuchen soll und die Dateien auflisten soll? Es reicht, wenn er nur das Arbeitsverzeichnis anzeigen kann!
MfG
wasi -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
http://www.antonis.de/faq/qbmonfaq-Dateien/593658118.html
teil der QBMonsterFAQ von http://www.antonis.de -
also mit Quickbasic kenne ich mich net aus... aber m?sste der gleiche wie bei VB sein... habe da mal was f?r dich...
'zun?chst die ben?tigten API-Deklarationen
Private Declare Function FindFirstFile Lib "kernel32" _
Alias "FindFirstFileA" (ByVal lpFileName As String, _
lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" _
Alias "FindNextFileA" (ByVal hFindFile As Long, _
lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" _
(ByVal hFindFile As Long) As Long
Private Declare Function GetShortPathName Lib "kernel32" _
Alias "GetShortPathNameA" (ByVal lpszLongPath As String, _
ByVal lpszShortPath As String, ByVal cchBuffer As Long) _
As Long
Private Const MAX_PATH = 260
Private Const INVALID_HANDLE_VALUE = -1
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type WIN32_FIND_DATA
dwFileAttributes As Long ' Dateiattribute
ftCreationTime As FILETIME ' Erstellungsdatum
ftLastAccessTime As FILETIME ' Letzter Zugriff
ftLastWriteTime As FILETIME ' Letzte Speicherung
nFileSizeHigh As Long ' Gr??e (Hi)
nFileSizeLow As Long ' Gr??e (Lo)
dwReserved0 As Long ' bedeutungslos
dwReserved1 As Long ' bedeutungslos
cFileName As String * MAX_PATH ' Dateiname
cAlternate As String * 14 ' 8.3-Dateiname
End Type
Public Type Datei
Pfadname As String
DosDateiname As String
Dateiname As String
ErstelltAM As FILETIME
LetzterZugriff As FILETIME
Letze?nderung As FILETIME
DateiGr??e As Long
Atribute As Long
End Type
Public WasFound() As Datei
Public StopSearch As Boolean
' Suchroutine: Wildcards sind erlaubt (*.*, ?, ect.)
Public Function FindFile(ByVal StartPath As String, _
ByVal SearchSubfolder As Boolean, _
ByVal File As String, _
ByRef FileFound() As Datei)
Dim hFile As Long
Dim FileData As WIN32_FIND_DATA
Dim Directories() As String
Dim OnlyDirectories As Boolean
Dim TmpFile As String
Dim I As Integer
DoEvents
' Evtl. Backslash entfernen
If Right$(StartPath, 1) = "\" Then _
StartPath = Left$(StartPath, Len(StartPath) - 1)
SearchOnlySubfolders:
' Sucht nach einer Datei, und packt das
' Ergebnis in FileData
hFile = FindFirstFile(StartPath & "\" & File & _
vbNullChar, FileData)
' Wenn sie gefunden wurde, dann...
If hFile <> INVALID_HANDLE_VALUE Then
Do
' Ist es ein Verzeichniss oder eine Datei ?
With FileData
If (.dwFileAttributes And vbDirectory) = 0 Then
' Datei
' Nur wenn nicht nur Verzeichinsse gesucht werden
If Not OnlyDirectories Then
' Array vergr??ern und Daten ins Array schreiben
On Error GoTo Err_DimFile
ReDim Preserve FileFound(UBound(FileFound) + 1)
On Error GoTo 0
DoEvents
UmPacken FileFound(UBound(FileFound)), _
FileData, StartPath & "\" & File
End If
If StopSearch = True Then Exit Function
ElseIf SearchSubfolder = True Then
' Verzeichnis
' Verzeichnis nur im Array Speichern wenn es
' ?ber dem jetzigen liegt d.h. ".." "." sind
' nicht g?ltig
If Left$(.cFileName, InStr(.cFileName, vbNullChar) - 1) <> "." _
And Left$(.cFileName, InStr(.cFileName, vbNullChar) - 1) <> ".." Then
On Error GoTo Err_DimDir
ReDim Preserve Directories(UBound(Directories) + 1)
On Error GoTo 0
' Verzeichnis dem Array hinzuf?gen
Directories(UBound(Directories)) = _
Left$(.cFileName, InStr(.cFileName, vbNullChar) - 1)
End If
End If
End With
DoEvents
Loop Until FindNextFile(hFile, FileData) = 0 Or StopSearch = True
End If
FindClose hFile
' Unteroder durchsuchen
On Error GoTo Err_DimDir
If SearchSubfolder = False Or _
StopSearch = True Then Exit Function
On Error GoTo 0
' Wenn nach anderen Dateien als *.* gesucht wird,
' werden keine Ordner gefunden
' Deshalb noch einmal gezielt nach Ordnern suchen
If Not OnlyDirectories And SearchSubfolder = True And _
File <> "*.*" Then
OnlyDirectories = True
TmpFile = File
File = "*.*"
GoTo SearchOnlySubfolders
ElseIf TmpFile <> "" Then
File = TmpFile
End If
On Error GoTo Err_Exit
For I = 0 To UBound(Directories)
If StopSearch = True Then Exit Function
DoEvents
' Hier ruft die Funktion sich selbst auf - f?r
' jeden Unterordner
FindFile StartPath & "\" & Directories(I), _
SearchSubfolder, File, FileFound
Next I
Exit Function
Err_DimFile:
ReDim FileFound(0)
Resume Next
Err_DimDir:
ReDim Directories(0)
Resume Next
Err_Exit:
End Function
'Packt die Infos um und schneidet Nullchar-Zeichen ab
Private Function UmPacken(ByRef D As Datei, _
FD As WIN32_FIND_DATA, ByVal Path As String)
With FD
D.Atribute = .dwFileAttributes
D.DateiGr??e = .nFileSizeLow
D.Dateiname = Left$(.cFileName, InStr(.cFileName, _
vbNullChar) - 1)
D.DosDateiname = Left$(.cAlternate, _
InStr(.cAlternate, vbNullChar) - 1)
If D.DosDateiname = "" Then _
D.DosDateiname = D.Dateiname
D.ErstelltAM = .ftCreationTime
D.Letze?nderung = .ftLastWriteTime
D.LetzterZugriff = .ftLastAccessTime
D.Pfadname = Left$(Path, InStrRev(Path, "\"))
End With
End Function
Public Sub StartS()
Dim Dateien() As Datei
StopSearch = False
FindFile "C:\Windows\system32", True, "*.*", Dateien 'hir muss der dateifad angegeben werden.
'Ergebnisliste in Form1.List1 ausgeben 'hir muss die form angegeben werden und bedenke das du eine ListBox erstellen musst.
Form1.List1.Clear
For i = 0 To UBound(Dateien)
Form1.List1.AddItem Dateien(i).Dateiname
Next i
End Sub
'Und stoppen kann man das ganze hier
Public Sub StopS()
StopSearch = True
End Sub
das kloppste dir in nen modul und f?hrst die Prozedur StartS aus oder StopS ums abzubrechen... musst aber noch nen paar sachen in der StartS Prozedur ver?ndern... der dateipfad l?sst sich nat?rlich auch ?bergeben aber das m?sste dir reichen. Wenn noch irgendwelche fragen hast schicke mir ne PM. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage