ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 24.01.2000

Diese Seite wurde zuletzt aktualisiert am 24.01.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Dateien löschen - Explorer-like

Zurück...


Anzeige

(-hg) mailto:hg_shellkill@aboutvb.de

Eine Datei zu löschen ist in Visual Basic ein Kinderspiel - zum Beispiel:

Kill "c:\autoexec.bat"

- und schon ist die Datei weg und unrettbar verloren.

Vor allem bei vom Anwender ausgelösten Dateilöschungen sollten Sie ihm daher die Windows-übliche Möglichkeit einräumen, gelöschte Dateien (und Ordner) aus dem Papierkorb wieder herzustellen zu können. Verwenden Sie in solchen Fällen die API-Funktion MSDN Library - API SHFileOperationSHFileOperation. Bei dieser können Sie wählen, ob die Datei(en) im Papierkorb landen, oder ob sie wie bei der VB-MSDN Library - VB KillKill-Anweisung gleich vollständig gelöscht werden. Außerdem können Sie die gewohnte Fortschrittsanzeige bieten und einige Einstellungen mehr festlegen (MSDN Library - API SHFILEOPSTRUCTSHFILEOPSTRUCT). Ebenso können Sie mit ihr komplette Ordner auf einen Schlag löschen - ein komplizierter, rekursiver Mechanismus mit den VB-Anweisungen Kill und MSDN Library - VB RmDirRmDir entfällt, mit dem alle untergeordneten Ordner geleert und einzeln gelöscht werden müssten.

Die hier vorgestellte Ersatzfunktion Kill verhält sich wie das VB-Original, wenn Sie ihr (wie gewohnt) lediglich den gewünschten Dateinamen übergeben. Sie können ihr aber auch ein (dimensioniertes oder aktuell mit der MSDN Library - VB ArrayArray-Funktion zusammengestelltes) Array oder eine MSDN Library - VB CollectionCollection aus einzelnen Datei- und Ordnerpfaden übergeben. Und sie können Wildcards (etwa "*.*" oder "*.bas") verwenden.

Die gewünschte Funktionalität legen Sie in den einzelnen optionalen Parametern fest. Sollen die Dateien in den Papierkorb verschoben werden, setzen Sie AllowUndo gleich True. Soll der Windows-übliche Fortschrittsdialog mit Möglichkeit zum Abbrechen des Vorgangs angezeigt werden, setzen Sie ShowProgress gleich True. Die Rückfrage, ob wirklich gelöscht werden soll, legen Sie mit Confirmation gleich True fest. Eine etwas vereinfachte Fortschrittsanzeige, bei der die Anzeige der gerade bearbeiteten Dateinamen unterbleibt, wählen Sie mit Simple gleich True. Wenn Sie im Falle eines Fehlers die Windows-Anzeige dieses Fehlers beibehalten wollen, setzen Sie SysErrors gleich True.

Unabhängig davon, wie Sie den letztgenannten Parameter setzen, gibt die Funktion Kill den Wert True zurück, wenn ein Fehler aufgetreten ist. Allerdings lässt sich der Fehler nicht näher spezifizieren - Sie müssen auf andere Weise prüfen, was schief gegangen sein könnte (Datei nicht vorhanden, gesperrt u.a.). Hat der Anwender bei den gelegentlichen Rückfragen des Systems (Löschen einer Systemdatei o.ä.) beispielsweise einzelne Dateien übersprungen, können Sie diese Information über den Parameter UserAborts erhalten, in der Sie dazu eine Variable übergeben müssen. Allerdings müssen Sie auch hierbei wieder selbst herausfinden, welche Dateien übersprungen worden sind.

Das Visual Basic-Original der Kill-Anweisung können Sie anstelle dieser erweiterten Kill-Funktion weiterhin jederzeit aufrufen. Dazu setzen Sie einfach den Herkunftsbezeichner (Qualifizierer) davor: "VBA.Kill ...".

Private Type SHFILEOPSTRUCT
  hWnd As Long
  wFunc As Long
  pFrom As String
  pTo As String
  fFlags As Integer
  fAnyOperationsAborted As Long
  hNameMappings As Long
  lpszProgressTitle As String
End Type

Private Declare Function SHFileOperation Lib "Shell32.dll" _
 Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long

Public Function Kill(Files As Variant, _
 Optional ByVal AllowUndo As Boolean, _
 Optional ByVal ShowProgress As Boolean, _
 Optional ByVal Confirmation As Boolean, _
 Optional ByVal Simple As Boolean, _
 Optional ByVal SysErrors As Boolean, _
 Optional ByVal hWnd As Long, _
 Optional UserAborts As Variant _
  ) As Boolean
 
  Dim l As Long
  Dim nFileOperations As SHFILEOPSTRUCT
  
  Const FO_DELETE = &H3
  Const FOF_ALLOWUNDO = &H40
  Const FOF_SILENT = &H4
  Const FOF_NOCONFIRMATION = &H10
  Const FOF_SIMPLEPROGRESS = &H100
  Const FOF_NOERRORUI = &H400
  
  With nFileOperations
    If IsArray(Files) Then
      For l = LBound(Files) To UBound(Files)
        .pFrom = .pFrom & Files(l) & vbNullChar
      Next 'l
      .pFrom = .pFrom & vbNullChar
    ElseIf VarType(Files) = vbObject Then
      If TypeOf Files Is Collection Then
        For l = 1 To Files.Count
          .pFrom = .pFrom & Files(l) & vbNullChar
        Next 'l
        .pFrom = .pFrom & vbNullChar
      End If
    ElseIf VarType(Files) = vbString Then
      .pFrom = Files
      If Right$(.pFrom, 1) <> vbNullChar Then
        .pFrom = .pFrom & vbNullChar
      End If
      If Mid$(.pFrom, Len(.pFrom) - 1, 1) <> vbNullChar Then
        .pFrom = .pFrom & vbNullChar
      End If
    End If
    If AllowUndo Then
      .fFlags = FOF_ALLOWUNDO
    End If
    If Not ShowProgress Then
      .fFlags = .fFlags Or FOF_SILENT
    End If
    If Not Confirmation Then
      .fFlags = .fFlags Or FOF_NOCONFIRMATION
    End If
    If Simple Then
      .fFlags = .fFlags Or FOF_SIMPLEPROGRESS
    End If
    If Not SysErrors Then
      .fFlags = .fFlags Or FOF_NOERRORUI
    End If
    .wFunc = FO_DELETE
    .hWnd = hWnd
    Kill = Not CBool(SHFileOperation(nFileOperations))
    If Not IsMissing(UserAborts) Then
      UserAborts = CBool(.fAnyOperationsAborted)
    End If
  End With
End Function

Mit der erweiterten Ersatzfunktion Kill können Sie Dateien in den Papierkorb verschieben, wie im Explorer Fortschrittsdialoge anzeigen und mehr


Modul modShellKill (modShellKill.bas - ca. 2,7 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikel

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer