Das Löschen von Dateien mag in der Welt der Programmierung eine elementare Aufgabe sein, doch sie birgt in verschiedenen VB-Sprachen ihre eigenen Herausforderungen und Nuancen. In diesem Artikel bieten wir einen umfassenden Überblick über die verschiedenen Methoden zur Dateilöschung in VBA, VB6, VBScript und VB.NET.

FileSystemobject (VBA, VBS, VB6, [VB.net])

FileSystemObject (FSO) ist eine vielseitige Option für Dateioperationen. Hier ein Beispiel für VBA und VB6:

Public Function DateiLoeschen(strPath As String) As Boolean
    Dim fso As New FileSystemObject
    If fso.fileexists(strPath) Then
        fso.getFile(strPath).Delete()
        DateiLoeschen = Not fso.fileexists(strPath)
    Else
        DateiLoeschen = True
    End If
End Function

Auch in VB.NET lässt sich das FileSystemObject nutzen:

Public Function DateiLoeschen4(ByVal strPath As String) As Boolean
    Dim fso As Object = CreateObject("Scripting.FileSystemObject")
    If fso.fileexists(strPath) Then
        fso.getFile(strPath).Delete()
        Return Not fso.fileexists(strPath)
    Else
        Return True
    End If
End Function

Kill (VBA, VB.Net, VB6, VBS)

Eine direktere Methode ist der Kill-Befehl:

Public Function DateiLoeschen2(ByVal strPfad As String) As Boolean
    On Error Resume Next
    If Len(Dir$(strPfad)) > 0 Then
        SetAttr(strPfad, vbNormal)
        Kill(strPfad)
        Return Len(Dir$(strPfad)) = 0
    Else
        Return True
    End If
End Function

File.IO (VB.Net) mit Recycle Bin (Papierkorb)

In VB.NET kann man Dateien auch in den Papierkorb verschieben:

Public Function Dateiloeschen3(ByVal strPfad As String) As Boolean
    On Error Resume Next
    If FileIO.FileSystem.FileExists(strPfad) Then
        FileIO.FileSystem.DeleteFile(strPfad, FileIO.UIOption.OnlyErrorDialogs, FileIO.RecycleOption.SendToRecycleBin)
        Return Not FileIO.FileSystem.FileExists(strPfad)
    Else
        Return True
    End If
End Function

System.IO (VB.Net)

Eine weitere Methode in VB.NET bietet System.IO:

Public Function DateiLoeschen(ByVal strPfad As String) As Boolean
    On Error Resume Next
    If System.IO.File.Exists(strPfad) Then
        System.IO.File.Delete(strPfad)
        Return Not System.IO.File.Exists(strPfad)
    Else
        Return True
    End If
End Function

My.Computer.FileSystem.DeleteFile (VB.NET)

Diese Methode bietet eine einfachere Syntax und zusätzliche Optionen wie das Verschieben in den Papierkorb:

My.Computer.FileSystem.DeleteFile("Pfad/Zur/Datei.txt", _
    FileIO.UIOption.AllDialogs, FileIO.RecycleOption.SendToRecycleBin)

Harte Möglichkeit (mit Recycle Bin, Papierkorb) (VB.net, VBA, VB6)

Für fortgeschrittene Anwendungsfälle, wie das Verschieben einer Datei in den Papierkorb, kann die Win32 API SHFileOperation verwendet werden. Beachten Sie, dass API-Calls in VBS nicht möglich sind:

Option Explicit

' Deklaration der SHFileOperation-Funktion
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" ( _
    ByRef lpFileOp As SHFILEOPSTRUCT) As Long

' Definition des SHFILEOPSTRUCT-Typs
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

' Konstanten für verschiedene Operationen und Flags
Private Const FO_DELETE = &H3
Private Const FOF_ALLOWUNDO = &H40
Private Const FOF_NOCONFIRMATION = &H10
Private Const FOF_SILENT = &H4

' Beispiel: Funktion zum Löschen einer Datei mit der Option, diese in den Papierkorb zu verschieben
Public Sub DeleteFileToRecycleBin(filePath As String)
    Dim fileOp As SHFILEOPSTRUCT
    
    With fileOp
        .wFunc = FO_DELETE
        .pFrom = filePath & vbNullChar
        .fFlags = FOF_ALLOWUNDO Or FOF_NOCONFIRMATION Or FOF_SILENT
    End With
    
    SHFileOperation fileOp
End Sub

In diesem Beispiel:

  • SHFileOperation wird deklariert, um Operationen auf Dateien oder Verzeichnissen auszuführen.
  • SHFILEOPSTRUCT ist der Typ, der die notwendigen Informationen für die SHFileOperation-Funktion enthält.
  • Die Funktion DeleteFileToRecycleBin ist ein Beispiel, wie Sie SHFileOperation verwenden können, um eine Datei zu löschen, wobei die Datei in den Papierkorb verschoben wird statt sie endgültig zu entfernen.

API Funktion DeleteFile

Eine weitere API-basierte Methode ist DeleteFile:

Private Declare Function DeleteFile Lib "kernel32.dll" Alias "DeleteFileA" ( _
    ByVal lpFileName As String) As Long

Private Function DateiLoeschen(ByVal strPath As String) As Boolean
    ' Implementierung der Funktion
End Function

Fazit

Jede der vorgestellten Methoden hat ihre eigenen Vor- und Nachteile, abhängig vom spezifischen Einsatzgebiet und den Anforderungen des Projekts. Dieser Artikel gibt Ihnen einen Überblick über die Optionen, damit Sie die richtige Wahl für Ihre VB-Programmieraufgaben treffen können.