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



 Ranking-Hits zurück Sitemap
Designed by www.wbrnet.info