|
Nun war aus den Kommentaren zu entnehmen das diese Lösung Schwierigkeiten mit großen Dateimengen hat.
Also habe ich selbst eine DLL geschrieben, die wie ich hoffe, dieses Manko behebt.
Gerade unter A2007 wo die"Application.FileSearch-Methode" fehltist diese DLL ein wichtiges Hilsmittel.
Es sind noch ein paar andere Sachen in dieser DLL integriert, zu denen ich noch komme.
Das Bsp ist unter A00-A07 lauffähig.
Getestet unter WinXP, Win Vista 32Bit und Win7 RC1 64Bit
Die "tk_FileFunc.dll" ist eine VB6 ActiveX-DLL deshalb muss diese im System registriert werden.
Das übernimmt das Setup des Downloads.
Bei manueller Weitergabe muss die "tk_FileFunc.dll" mittels regsvr32.exe im System registriert werden.
Folgende Funktionen sind in der DLL derzeit vorhanden:
- kompletter Datei- und Verzeichnis Dialog
- Suchen und Einlesen von Dateien mit und ohne Unterverzeichnissen und Wildcards
- Dateifunktionen wie Kopieren, Verschieben und Löschen auf API-Basis
- Verzeichnisse anlegen auch mit mehreren Unterverzeichnissen.
Dafür sind in der DLL 3 Klassen enthalten:
- cls_FileDialog: Datei- und Verzeichnis Dialog
- cls_ListFiles: Suchen und Einlesen von Dateien mit und ohne Unterverzeichnissen und Wildcards
- cls_FileFunc: Dateifunktionen wie Kopieren, Verschieben und Löschen auf API-Basis, Verzeichnisse anlegen
Zuerst muss die DLL per Verweis in die DB eingefügt werden
1. Datei- und Verzeichnis Dialog
Hier ein Bsp zum Aufruf des Verzeichnisauswahl Dialogs:
Private Sub cmd_Folder_Click()
Dim cFD As New cls_FileDialog
Dim sFolder As String
With cFD
.DialogTitle = "Bitte Startverzeichnis wählen"
.ShowFolder
sFolder = .FileName
If .FileName = "" Then Exit Sub
End With
End Sub
oder Datei Öffnen Dialog:
Private Sub cmd_Folder_Click()
Dim cFD As New cls_FileDialog
Dim sFile As String
With cFD
.DialogTitle = "Datei öffnen"
.DefaultDir = "C:\"
.DefaultExt = "*.mdb"
.Filter1Text = "Access-Datenbanken"
.Filter1Suffix = "*.mdb"
.ShowOpen
sFile = .FileName
If .FileName = "" Then Exit Sub
End With
End Sub
Alle weiteren Möglichkeiten können dem Objektkatalog entnommen werden.
2. Dateifunktionen
3. Suchen und Einlesen von Dateien mit und ohne Unterverzeichnissen und Wildcards
Kommen wir zum Kernstück der DLL.
Die Klasse cls_ListFiles dient zum Einlesen der Dateien.
Wobei das Suchergebnis in einer Collection zurück gegeben wird.
In der Bsp-DB wird ein Listview mit dem Ergebnis gefüllt. Ihr könnt aber
genauso ein Listenfeld mittels Wertliste über die AddItem-Methode (ab AXP) füllen.
Hier ist aber darauf zuachten das bei der Werliste bei 4096 Zeichen Schluss ist und
somit bei vielen Dateien zu einer Fehlermeldung führt.
So könnte ein Aufruf aussehen:
Es werden alle Datei im Verzeichnis "D:\Daten" inklusive alle Unterverzeichnisse eingelesen.
Private Sub cmd_Folder_Click()
Dim cLFs As New cls_ListFiles
Dim x
x = cLFs.ListFiles("D:\Daten", "*.*", True)
End Sub
Über die Eigenschaft "Count" kann die Anzahl der gefundenen Dateien zurück gegeben werden.
MsgBox "Es wurden " & cLFs.Col_File.count & " Dateien nach den Kriterien gefunden"
In der Bsp.-DB ist es etwas komfortabler :
Hier sähe der Code dann so aus:
Private Sub cmd_Folder_Click()
Dim sFolder As String
Dim sFilter As String
Dim x
Dim i As Long
With cFD
.DialogTitle = "Bitte Startverzeichnis wählen"
.ShowFolder
sFolder = .FileName
If .FileName = "" Then Exit Sub
End With
With oListView
.ListItems.Clear
.Refresh
End With
If IsNull(Me.txt_Filter) Then
sFilter = "*.*"
Else
sFilter = Me.txt_Filter
End If
x = cLFs.ListFiles(sFolder, sFilter, Me.chk_SubFolder)
MsgBox "Es wurden " & cLFs.Col_File.count & " Dateien nach den Kriterien gefunden"
For i = 1 To cLFs.Col_File.count
Set objListItem = oListView.ListItems.Add(, "a" & i, cLFs.Col_File(i))
Next i
End Sub
Die For-Next Schleife am Ende durchläuft die Collection und fügt die Einträge dem Listview hinzu.
Letztes Update : 16-09-2009 17:46
|