std::filesystem:: rename
|
Definiert im Header
<filesystem>
|
||
|
void
rename
(
const
std::
filesystem
::
path
&
old_p,
const std:: filesystem :: path & new_p ) ; |
(1) | (seit C++17) |
|
void
rename
(
const
std::
filesystem
::
path
&
old_p,
const
std::
filesystem
::
path
&
new_p,
|
(2) | (seit C++17) |
Verschiebt oder benennt das Dateisystemobjekt, das durch
old_p
identifiziert wird, nach
new_p
, wie durch die POSIX-Funktion
rename
:
- Wenn old_p eine Nicht-Verzeichnisdatei ist, dann muss new_p eines der folgenden sein:
-
- dieselbe Datei wie old_p oder ein Hardlink darauf: In diesem Fall wird nichts unternommen.
- existierende Nicht-Verzeichnisdatei: new_p wird zunächst gelöscht, dann wird – ohne anderen Prozessen die Möglichkeit zu geben, new_p als gelöscht zu beobachten – der Pfadname new_p mit der Datei verknüpft und old_p von der Datei getrennt. Schreibberechtigungen sind sowohl für das Verzeichnis, das old_p enthält, als auch für das Verzeichnis, das new_p enthält, erforderlich.
- nicht existierende Datei in einem existierenden Verzeichnis: Der Pfadname new_p wird mit der Datei verknüpft und old_p von der Datei getrennt. Schreibberechtigungen sind sowohl für das Verzeichnis, das old_p enthält, als auch für das Verzeichnis, das new_p enthält, erforderlich.
- Wenn old_p ein Verzeichnis ist, dann muss new_p eines der folgenden sein:
-
- dasselbe Verzeichnis wie old_p oder ein Hardlink darauf: In diesem Fall wird nichts unternommen.
- bestehendes Verzeichnis: new_p wird unter POSIX-Systemen gelöscht, falls leer, kann aber auf anderen Systemen einen Fehler verursachen. Falls kein Fehler auftritt, wird new_p zuerst gelöscht, dann, ohne anderen Prozessen die Möglichkeit zu geben, new_p als gelöscht zu beobachten, der Pfadname new_p mit dem Verzeichnis verknüpft und old_p vom Verzeichnis getrennt. Schreibberechtigungen sind sowohl für das Verzeichnis, das old_p enthält, als auch für das Verzeichnis erforderlich, das new_p enthält.
- nicht existierendes Verzeichnis, das nicht mit einem Verzeichnisseparator endet und dessen übergeordnetes Verzeichnis existiert: Der Pfadname new_p wird mit dem Verzeichnis verknüpft und old_p vom Verzeichnis getrennt. Schreibberechtigungen sind sowohl für das Verzeichnis, das old_p enthält, als auch für das Verzeichnis erforderlich, das new_p enthält.
- Symlinks werden nicht verfolgt: wenn old_p ein Symlink ist, wird er selbst umbenannt, nicht sein Ziel. Wenn new_p ein existierender Symlink ist, wird er selbst gelöscht, nicht sein Ziel.
Umbenennen schlägt fehl, wenn
- new_p endet mit dot oder mit dot-dot .
- new_p benennt ein nicht existierendes Verzeichnis, das mit einem Verzeichnisseparator endet.
- old_p ist ein Verzeichnis, das ein Vorgänger von new_p ist.
Inhaltsverzeichnis |
Parameter
| old_p | - | Pfad zum Verschieben oder Umbenennen |
| new_p | - | Zielpfad für die Verschiebe-/Umbenennungsoperation |
| ec | - | Out-Parameter für Fehlerberichterstattung in der nicht-werfenden Überladung |
Rückgabewert
(keine)
Ausnahmen
Jede Überladung, die nicht als
noexcept
gekennzeichnet ist, kann
std::bad_alloc
auslösen, wenn die Speicherallokation fehlschlägt.
Beispiel
#include <filesystem> #include <fstream> namespace fs = std::filesystem; int main() { std::filesystem::path p = std::filesystem::current_path() / "sandbox"; std::filesystem::create_directories(p / "from"); std::ofstream{ p / "from/file1.txt" }.put('a'); std::filesystem::create_directory(p / "to"); // fs::rename(p / "from/file1.txt", p / "to/"); // Fehler: "to" ist ein Verzeichnis fs::rename(p / "from/file1.txt", p / "to/file2.txt"); // OK // fs::rename(p / "from", p / "to"); // Fehler: "to" ist nicht leer fs::rename(p / "from", p / "to/subdir"); // OK std::filesystem::remove_all(p); }
Siehe auch
|
benennt eine Datei um
(Funktion) |
|
|
(C++17)
(C++17)
|
entfernt eine Datei oder leeres Verzeichnis
entfernt eine Datei oder Verzeichnis und alle dessen Inhalte rekursiv (Funktion) |