Win32-API zum umbenennen einer Datei in C
Wenn das Quellverzeichnis und das Zielverzeichnis, MoveFile würde tatsächlich eine Kopie der Quelldatei in die Zieldatei, was bedeutet, dass ich am Ende sehen Sie zwei Dateien.
Ist, dass der beste Weg, den umbenennen kann erreicht werden?
- umbenennen in stdio.h?
- Was genau meinst du?
MoveFileEx
mitMOVEFILE_COPY_ALLOWED
wird nicht geben Sie zwei Dateien - ruft CopyFile dann DeleteFile, wenn die beiden Dateien sind auf unterschiedlichen volumes. - Ich glaube, ich habe gesehen, Fälle, in denen MoveFile() tun CopyFile() + DeleteFile(), aber die Quelldatei ist immer noch gesperrt, von jemandem also, es ist status Löschen Anstehend; dann, wenn es freigeschaltet ist es auf Magische Weise verschwindet. Oder vielleicht bin ich erfunden; kann mich nicht erinnern.
- Wenn das Programm abstürzt oder Stromausfall, nicht-Atomare Bewegt (AKA kopieren-löschen) können in Widerspruch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
MoveFile
Funktion ist in der Tat das, was Sie wollen. Aus der Dokumentation:Wenn die Quell-und Ziel-Standorte stehen beide auf der gleichen Lautstärke, dann eine Atomare rename-operation wird durchgeführt. Wenn Sie sich auf unterschiedlichen volumes, dann eine Kopie/löschen Bedienung erfolgt statt (das ist das beste, was Sie tun können).
MoveFileEx
standardmäßig nur bewegt, es wird nicht kopiert, es sei denn, Sie übergebenMOVEFILE_COPY_ALLOWED
Flagge.Versuchen
Möchten Sie vielleicht zu versuchen, mit der
MoveFileEx()
- API ohne Angabe derMOVEFILE_COPY_ALLOWED
zu sehen, ob das bietet das Verhalten, die Sie suchen.Was macht Ihr code Aussehen? Ich habe diese:
und es nicht verlassen, die Quelle hinter.