Funktionen wie Filecopy, Name und Kill sind seit jeher Bestandteil von BASIC. In der Windows-Welt sind sie aber nicht mehr besonders zeitgemäß. Kopieren Sie mal eine 1.2 MB große Datei auf die Floppy (das dauert!) und bewegen sie die Maus - nichts passiert! Oder soll beim Löschen die Datei in den Papierkorb? Kill hat sie gekillt! Alle benötigten Konstanten, die API-Deklaration und die SHFILEOPSTRUCT-Struktur. ' KONSTANTEN DER FUNC ' Kopiert das File in pFROM nach pTo Private Const FN_COPY = &H2& ' Löscht das File in pFrom (pTo wird ignoriert) Private Const FN_DELETE = &H3& ' Verschiebt das File in pFROM nach pTo Private Const FN_MOVE = &H1& ' Umbenennen des Files in pTo Private Const FN_RENAME = &H4& ' KONSTANTEN DER FLAGS ' Undo Information -> Schiebt beim Löschen ' das (die) File(s) in den Papierkorb Private Const FNF_ALLOWUNDO = &H40& ' Bislang keine bekannte Funktion Private Const FNF_CONFIRMMOUSE = &H2& ' Handle zum Eltern-Fenster der ' Progress-Dialogbox (also Me.hwnd) Private Const FnF_CREATEPROGRESSDLG = &H0& ' Nur Files - KEINE ORDNER - wenn *.* als Source Private Const FnF_FILESONLY = &H80& ' Für diverse Stellen bei DEST (der "pTo" muss dann ' die gleiche Anzahl von Zielen aufweisen wie "pFrom" Private Const FnF_MULTIDESTFILES = &H1& ' ANTWORTET AUTOMATISCH MIT 'JA für alle' Private Const FnF_NOCONFIRMATION = &H10& ' Keine Abfrage für einen neuen Ordner, falls benötigt Private Const FnF_NOCONFIRMMKDIR = &H200& ' Bei Namenskollisionen im ZIEL wird ein neuer Name ' erzeugt (z.B. Kopie(2) von xy.tmp) Private Const FnF_RENAMEONCOLLISION = &H8& ' Zeigt keine Fortschritts-Dialogbox (fliegende Blätter) Private Const FnF_SILENT = &H4& ' Zeigt die Fortschritts-Dialogbox an, aber ohne Filenamen Private Const FnF_SIMPLEPROGRESS = &H100& ' Wenn FnF_RENAMECOLLISION gewählt wird, ' hNameMappings wird gefüllt (Anzahl) Private Const FnF_WANTMAPPINGHANDLE = &H20& ' Eine Funktion für vier Dateioperationen Private Declare Function SHFileOperation Lib "shell32.dll" _ Alias "SHFileOperationA" ( _ lpFileOp As SHFILEOPSTRUCT) As Long Type SHFILEOPSTRUCT hWnd As Long wFunc As Long pFrom As String pTo As String fFlags As Integer fAnyOperationsAborted As Boolean hNameMappings As Long lpszProgressTitle As String End Type Parameterbeschreibung Alle Funktionen (Kopieren, Löschen, Umbenennen und Verschieben) verlangen den vollständigen Pfad für Source und Dest. ' SOURCE: Dateiname ' Dateiname mit Wildcards (TEST.*,*.TMP,*.*) ' Ordner ' oder Liste (vorher aufrufen) ' ' DEST : siehe oben ' wenn LISTE, dann gleiche Zahl von Einträgen Kopieren wie der Explorer Public Function fCopy(Source As String, Dest As String, _ Ueberschreiben As Boolean) As Long ' Ueberschreiben: True, wenn ohne Warnung überschrieben ' werden soll (Entspricht -y beim DOS copy BEFEHL) Dim FileStructur As SHFILEOPSTRUCT Dim FLAG As Integer FLAG = 0 If InStr(Source, vbNullChar + vbNullChar) > 0 Then _ FLAG = FLAG + FnF_MULTIDESTFILES If InStr(Source, "*") > 0 Then _ FLAG = FLAG + FnF_FILESONLY If Ueberschreiben = True Then _ FLAG = FLAG + FnF_RENAMEONCOLLISION With FileStructur .wFunc = FN_COPY .pFrom = Check_NullChars(Source) .pTo = Dest .fFlags = FLAG End With fCopy = SHFileOperation(FileStructur) End Function Dauerhaftes Löschen oder Löschen in den Papierkorb Public Function fDelete(Source As String, DelToTrash As _ Boolean, ShowDialog As Boolean) As Long ' DelToTrash: True, wenn in Papierkorb gelöscht ' ShowDialog: True, wenn zusätzlich Löschabfrage ' erfolgen soll Dim FileStructur As SHFILEOPSTRUCT Dim Flags As Long Flags = 0 If DelToTrash Then Flags = FNF_ALLOWUNDO If Not ShowDialog Then Flags = Flags Or FnF_NOCONFIRMATION With FileStructur .wFunc = FN_DELETE .pFrom = Check_NullChars(Source) .fFlags = Flags End With fDelete = SHFileOperation(FileStructur) End Function Dateien verschieben Public Function fMove(Source As String, _ Dest As String) As Long Dim FileStructur As SHFILEOPSTRUCT With FileStructur .wFunc = FN_MOVE .pFrom = Check_NullChars(Source) .pTo = Dest .fFlags = FnF_RENAMEONCOLLISION + FnF_SILENT End With fMove = SHFileOperation(FileStructur) End Function Datei umbenennen Public Function fRename(Source As String, _ Dest As String) As Long Dim FileStructur As SHFILEOPSTRUCT With FileStructur .wFunc = FN_RENAME .pFrom = Check_NullChars(Source) .pTo = Dest .fFlags = FnF_RENAMEONCOLLISION + FnF_SILENT End With fRename = SHFileOperation(FileStructur) End Function Hilfsroutinen ' Alle Dateinamen eines Array-Datenfeldes hintereinander ' - durch vbNullChar getrennt - zusammenfassen Public Function FilesFromArray(Liste() As String) As String Dim i As Long Dim temp As String For i = 0 To UBound(Liste) If FileExists(Liste(i)) Then ' Datei-Eintrag mit CHR(0) abschließen temp = temp + Liste(i) + vbNullChar Else MsgBox (Liste(i) & "existiert hier nicht") End If Next ' Notwendig: Abschließendes CHR(0) FilesFromArray = temp + vbNullChar End Function ' Alle Angaben müssen mit vbNullChar+vbNullChar ' abgeschlossen werden. Hier wird's noch mal geprüft Private Function Check_NullChars(S As String) As String If Right(S, 2) <> vbNullChar + vbNullChar Then If Right(S, 1) <> vbNullChar Then S = S + vbNullChar + vbNullChar Else S = S + vbNullChar End If End If Check_NullChars = S End Function ' Prüfen, ob Datei existiert Public Function FileExists(ByVal Filename As String) _ As Boolean FileExists = (Dir(Filename) <> "") End Function Dieser Tipp wurde bereits 84.061 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
TOP! Unser Nr. 1 Neu! sevDataGrid 3.0 Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. Tipp des Monats Mai 2024 Hermann Röttger Wochentage eines Datumsbereichs ermitteln Wochentage eines Datumsbereichs ermitteln, optional mit Feiertagsberechnung Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |