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;