Home » Tipps & Tricks » Dateien/Verzeichnisse » Dateioperationen » Dateien umbenennen oder verschieben

Dateien umbenennen oder verschieben

Dieser Artikel zeigt, wie Sie Dateien umbenennen oder verschieben können. Dateien, die umbenannt werden, liegen weiterhin im gleichen Verzeichnis. Verschobene Dateien können einen anderen Dateinamen und/oder Pfad haben.

Die untenstehende Funktion greift auf die API ShFileOperation zurück. Über die Einstellung fo_Move wird sie angewiesen, die Dateien zu verschieben bzw. umzubenennen. Theoretisch könnte man auch fo_Rename verwenden. Auf diese Weise ist aber wirklich nur ein umbenennen einer Datei möglich. Unsere Funktion erlaubt es mehrere Dateien gleichzeitig wahlweise umzubenennen oder zu verschieben.

Die Unit ShellApi muss eingebunden werden.

function RenameFileEx(const AOldName, ANewName: string;
   ARenameCheck: boolean = false): boolean;
var
  sh: TSHFileOpStruct;
begin
  sh.Wnd := Application.Handle;
  sh.wFunc := fo_Move;

  // String muss mit #0#0 Terminiert werden, um das Listenende zu setzen
  sh.pFrom := PChar(AOldName + #0);
  sh.pTo := PChar(ANewName + #0);
  sh.fFlags := fof_Silent or fof_MultiDestFiles;
  if ARenameCheck then
    sh.fFlags := sh.fFlags or fof_RenameOnCollision;
  Result:=ShFileOperation(sh)=0;
end;

Als Parameter werden die alten und die neuen Dateinamen erwartet. Der optionaler Parameter gibt an, ob mögliche Kollisionen mit bereits vorhandenen Dateinamen behandelt werden sollen.

Sollen mehrere Dateien umbenannt werden, müssen die einzelnen Dateinamen mit einem #0 getrennt werden:

procedure TForm1.Button1Click(Sender: TObject);
begin
  RenameFileEx('c:\a1.txt' + #0 + 'c:\a2.txt', 'c:\b1.txt' + #0 + 'c:\b2.txt');
end;