Datei Kopieren, Verschieben, Löschen oder Umbenennen wie im Explorer

Datei Kopieren, Verschieben, Löschen oder Umbenennen wie im Explorer: Copy, Delete, Move, Rename
Konstanten der Funktion
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
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 im Explorer
Die nachfolgende Funktion kopiert eine Datei im Stile des Windows-
Explorers, d.h. mit Fortschrittsanzeige und "fliegenden" Blättern
Public Function fCopy(Source As String, Dest As String, _
Ueberschreiben As Boolean) As Long
'Überschreiben: 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
Die nachfolgende Routine löscht eine Datei oder einen Ordner direkt
vom Datenträger oder in den Windows-Papierkorb. Zusätzlich kann angegeben
werden, ob ein zusätzlicher Lösch-Hinweis angezeigt werden soll oder nicht.
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
Andere Möglichkeit: "Papierkorb komplett leeren" siehe:
http://www.wbrnet.info/db/0557.html
 
Dateien verschieben
Die nachfolgende Routine verschiebt eine Datei, eine Dateigruppe oder
einen ganzen Ordner in einen anderen Ordner oder auf ein anderes Laufwerk.
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
Mit nachfolgender Routine kann eine Datei oder auch ein Verzeichnis
in einen anderen Namen umbenannt werden.
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
Die nachfolgenden Routinen werden teilweise von den Hauptfunktionen benötigt.
Zusätzlich wird gibt es hier eine Funktion, welche ein Array-Datenfeld von
Dateinamen in einen String zusammenfasst, wobei die einzelnen Dateinamen
automatisch mit dem notwendigen NULL-Zeichen voneinander getrennt werden.
 
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
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
Sponsoren und Investoren

Sponsoren und Investoren sind jederzeit herzlich willkommen!
Wenn Sie die Information(en) auf dieser Seite interessant fanden, freuen wir uns über eine kleine Spende. Empfehlen Sie uns bitte auch in Ihren Netzwerken (z. B. Twitter, Facebook oder Google+). Herzlichen Dank!

Nach oben Sitemap
Impressum & Kontakt