Home » Tipps & Tricks » Dateien/Verzeichnisse » Dateioperationen » Datei nach dem Neustart löschen

Datei nach dem Neustart löschen

Dieser Artikel zeigt, wie Sie eine Datei nach einem Neustart löschen können. Dies kann erforderlich sein, wenn Sie Dateien löschen möchten, die gerade in Benutzung sind (z.B. kann sich auf diese Weise ein Programm selbst löschen).

Die Vorgehensweise unterscheidet sich bei W9x/ME und NT/2k/XP. Wird die Win9x-Serie benutzt, muss man einen Eintrag „NUL=Dateiname“ unter dem Abschnitt „[Rename]“ in der „WINDIRwininit.ini“ hinzufügen. Bei der NT-Linie reicht es, die API „MoveFileEx“ mit einem entsprechenden Parameter aufzurufen.

Folgende Prozedur kaspelt den Aufruf und unterscheidet auch zwischen den Betriebssystemen:

procedure DeleteFileOnReboot(const Filename: string);
var
  Section: string;
  WinDir, WinInit: string;
begin
  if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
  begin
    SetLength(WinDir, MAX_PATH);
    SetLength(WinDir, GetWindowsDirectory(PChar(WinDir), MAX_PATH));
    WinInit := WinDir + 'WININIT.INI';
    SetLength(Section, MAXSHORT); // Win9x Beschränkung
    SetLength(Section, GetPrivateProfileSection('Rename', PChar(Section),
      Length(Section), PChar(WinInit)));
    Section := Section + 'NUL=' + Filename + #0;
    WritePrivateProfileSection('Rename', PChar(Section), PChar(WinInit));
  end
  else
    MoveFileEx(PChar(Filename), nil, MOVEFILE_DELAY_UNTIL_REBOOT);
end;

Achten Sie darauf, als Dateinamen den kompletten Dateinamen (inkl. Pfad!) zu übergeben! Es können auch leere Verzeichnisse gelöscht werden. Befinden sich noch Dateien in den Verzeichnissen müssen sie zuvor über wiederholte Aufrufe der Prozedur DeleteFileOnReboot entfernt werden. Windows löscht die Dateien in der Reihenfolge, wie sie vom Programmierer angegeben wurden.

Weitere Informationen zu diesem Vorgehen finden Sie in der PSDK unter dem Stichwort „MoveFileEx“.