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.068 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. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats Mai 2024 Hermann Röttger Wochentage eines Datumsbereichs ermitteln Wochentage eines Datumsbereichs ermitteln, optional mit Feiertagsberechnung sevZIP40 Pro DLL Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. |
||||||||||||||||
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. |