Namespaces
Variants

std::experimental::filesystem:: rename

From cppreference.net
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

#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)