std::experimental::filesystem:: rename
From cppreference.net
<
cpp
|
experimental
|
fs
|
Definiert im Header
<experimental/filesystem>
|
||
|
void
rename
(
const
path
&
old_p,
const
path
&
new_p
)
;
void rename ( const path & old_p, const path & new_p, std:: error_code & ec ) ; |
(Filesystem TS) | |
Verschiebt oder benennt das Dateisystemobjekt, das durch old_p identifiziert wird, zu new_p , wie durch den POSIX 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.
- existierendes Verzeichnis: new_p wird unter POSIX-Systemen gelöscht, falls leer, könnte 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 verlinkt und old_p vom Verzeichnis entfernt. 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 existierendes Verzeichnis, das nicht mit einem Verzeichnisseparator endet und dessen übergeordnetes Verzeichnis existiert: Der Pfadname new_p wird mit dem Verzeichnis verlinkt und old_p vom Verzeichnis entfernt. Schreibberechtigungen sind sowohl für das Verzeichnis, das old_p enthält, als auch für das Verzeichnis, das new_p enthält, erforderlich.
- Symlinks werden nicht verfolgt: wenn old_p ein Symlink ist, wird dieser selbst umbenannt, nicht sein Ziel. Wenn new_p ein existierender Symlink ist, wird dieser 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, der verschoben oder umbenannt werden soll |
| new_p | - | Zielpfad für die Verschiebe-/Umbenennungsoperation |
| ec | - | Out-Parameter für Fehlerberichterstattung in der nicht-werfenden Überladung |
Rückgabewert
(keine)
Ausnahmen
The overload that does not take an error_code & parameter throws filesystem_error on underlying OS API errors, constructed with old_p as the first argument, new_p as the second argument, and the OS error code as the error code argument. std:: bad_alloc may be thrown if memory allocation fails. The overload taking an error_code & parameter sets it to the OS API error code if an OS API call fails, and executes ec. clear ( ) if no errors occur. This overload has
noexcept
Spezifikation:
noexcept
Beispiel
Diesen Code ausführen
#include <experimental/filesystem> #include <fstream> #include <iostream> namespace fs = std::experimental::filesystem; int main() { fs::path p = fs::current_path() / "sandbox"; fs::create_directories(p/"from"); std::ofstream(p/"from/file1.txt").put('a'); fs::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 fs::remove_all(p); }
Siehe auch
|
benennt eine Datei um
(Funktion) |
|
|
entfernt eine Datei oder ein leeres Verzeichnis
entfernt eine Datei oder ein Verzeichnis und alle dessen Inhalte rekursiv (Funktion) |