vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Dateisystem · Dateien allgemein   |   VB-Versionen: VB5, VB614.11.05
Datei löschen Deluxe

Erweiterung der Kill-Anweisung, um Dateien zu schreddern oder alternativ in den Papierkorb zu löschen.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  19.812 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Wie man eine Datei löscht, dürfte bekannt sein. Hierzu ruft man einfach nur die Kill-Anweisung auf und übergibt den Dateinamen als Parameter.

Heute möchten wir Ihnen eine erweiterte Kill-Funktion vorstellen, bei der man zusätzlich angeben kann, ob die Datei in den Papierkorb gelöscht werden soll, so dass diese jederzeit wiederhergestellt werden kann. Auch das Schreddern von Dateien ist vorgesehen, d.h. der Inhalt der Datei kann dann auch nicht mit speziellen Tools wiederhergestellt werden.

Fügen Sie nachfolgenden Code in ein Modul ein:

Option Explicit
 
' benötigte API-Deklarationen
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
 
Private Declare Function GetForegroundWindow Lib "user32" () As Long
 
Private Const FO_DELETE = &H3
Private Const FOF_ALLOWUNDO = &H40
Private Const FOF_SILENT = &H4
Private Const FOF_NOCONFIRMATION = &H10
Private Const FOF_SIMPLEPROGRESS = &H100
Private Const FOF_NOERRORUI = &H400
 
' Lösch-Methoden
Public Enum DeleteMethod
  Normal = 0
  MoveToPaperBin = 1
  SecureKill = 2
End Enum
' Datei löschen
Public Function Kill(ByVal sFile As String, _
  Optional ByVal nMethod As DeleteMethod = Normal, _
  Optional ByVal bRaiseError As Boolean = True) As Boolean
 
  Dim F As Integer
 
  If Not bRaiseError Then
    ' Falls Fehler ignoriert werden sollen
    On Error GoTo ErrHandler
  End If
 
  ' je nach Löschmethode, folgende Aktion ausführen
  Select Case nMethod
    Case DeleteMethod.Normal
      ' VB.KillFile - Methode verwenden
      VBA.Kill sFile
      Kill = True
 
    Case DeleteMethod.MoveToPaperBin
      ' Datei in Windows-Papierkorb verschieben
      Dim oFileOP As SHFILEOPSTRUCT
      With oFileOP
        .hWnd = GetForegroundWindow()
        .pFrom = sFile & vbNullChar & vbNullChar
        .fFlags = FOF_ALLOWUNDO Or FOF_SILENT Or FOF_NOCONFIRMATION Or FOF_SIMPLEPROGRESS
        If Not bRaiseError Then .fFlags = .fFlags Or FOF_NOERRORUI
        .wFunc = FO_DELETE
        Kill = Not CBool(SHFileOperation(oFileOP))
      End With
 
    Case DeleteMethod.SecureKill
      ' Sicheres Löschen, d.h. Löschen einer Datei, ohne dass deren Inhalt
      ' wiederhergestellt werden kann
      Dim sBuffer As String
      Dim FileSize As Long
      Dim ReadSize As Long
      Dim nSize As Long
 
      Const BlockSize = 4096
 
      ' Datei-Inhalt blockweise mit
      ' Leerzeichen überschreiben
      F = FreeFile
      Open sFile For Binary As #F
      FileSize = LOF(F)
      While ReadSize < FileSize
        nSize = IIf(ReadSize + BlockSize > FileSize, FileSize - ReadSize, BlockSize)
        sBuffer = Space$(nSize)
        Put #F, , sBuffer
        ReadSize = ReadSize + nSize
      Wend
      Close #F
      VBA.Kill sFile
      Kill = True
  End Select
 
ErrHandler:
  If F > 0 Then Close #F
  On Error GoTo 0
End Function

Beispiele für den Aufruf der "neuen" Kill-Funktion.

' Datei wie bisher löschen (VB-Kill)
Kill "d:\temp\myfile.tmp"
' Löschen ohne Fehlermeldung:
' z.B. falls die Datei nicht existiert oder der Zugriff geblockt wird
Kill "d:\temp\myfile.tmp", , False
' Datei in den Windows-Papierkorb löschen
Kill "d:\temp\myfile.tmp", MoveToPaperBin
' Datei schreddern und löschen
Kill "d:\temp\myfile.tmp", SecureKill

Zusätzlich kann über den Funktions-Rückgabewert der Erfolg kontrolliert werden:

If Not Kill("d:\temp\myfile.tmp") Then
  MsgBox "Datei konnte nicht gelöscht werden!"
End If

Dieser Tipp wurde bereits 19.812 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel