Namespaces
Variants

std::filesystem:: copy_options

From cppreference.net
Definiert im Header <filesystem>
enum class copy_options {

none = /* unspecified */ ,
skip_existing = /* unspecified */ ,
overwrite_existing = /* unspecified */ ,
update_existing = /* unspecified */ ,
recursive = /* unspecified */ ,
copy_symlinks = /* unspecified */ ,
skip_symlinks = /* unspecified */ ,
directories_only = /* unspecified */ ,
create_symlinks = /* unspecified */ ,
create_hard_links = /* unspecified */

} ;
(seit C++17)

Dieser Typ repräsentiert verfügbare Optionen, die das Verhalten der copy() und copy_file() Funktion steuern.

copy_options erfüllt die Anforderungen von BitmaskType (was bedeutet, dass die bitweisen Operatoren operator & , operator | , operator ^ , operator~ , operator & = , operator | = und operator ^ = für diesen Typ definiert sind). none repräsentiert die leere Bitmaske; jeder andere Enumerator repräsentiert ein eindeutiges Bitmaskenelement.

Member-Konstanten

In jeder der folgenden Optionsgruppen darf höchstens eine Kopieroption vorhanden sein, andernfalls ist das Verhalten der Kopierfunktionen undefiniert.

Member constant Bedeutung
Optionen zur Steuerung von copy_file() wenn die Datei bereits existiert
none Einen Fehler melden (Standardverhalten).
skip_existing Bestehende Datei beibehalten, ohne Fehlermeldung.
overwrite_existing Vorhandene Datei ersetzen.
update_existing Vorhandene Datei nur ersetzen, wenn sie älter als die zu kopierende Datei ist.
Optionen zur Steuerung der Auswirkungen von copy() auf Unterverzeichnisse
none Unterverzeichnisse überspringen (Standardverhalten).
recursive Unterverzeichnisse und deren Inhalte rekursiv kopieren.
Optionen zur Steuerung der Auswirkungen von copy() auf symbolische Links
none Symbolischen Links folgen (Standardverhalten).
copy_symlinks Symbolische Links als Links kopieren, nicht als die Dateien, auf die sie verweisen.
skip_symlinks Symbolische Links ignorieren.
Optionen zur Steuerung der Art des Kopiervorgangs von copy()
none Dateiinhalt kopieren (Standardverhalten).
directories_only Verzeichnisstruktur kopieren, aber keine Nicht-Verzeichnisdateien kopieren.
create_symlinks Anstatt Kopien von Dateien zu erstellen, symbolische Links zu den Originalen anlegen. Hinweis: Der Quellpfad muss ein absoluter Pfad sein, es sei denn, der Zielpfad befindet sich im aktuellen Verzeichnis.
create_hard_links Anstatt Kopien von Dateien zu erstellen, Hardlinks erstellen, die auf dieselben Dateien wie die Originale verweisen.

Beispiel

#include <cstdlib>
#include <filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::filesystem;
int main()
{
    fs::create_directories("sandbox/dir/subdir");
    std::ofstream("sandbox/file1.txt").put('a');
    fs::copy("sandbox/file1.txt", "sandbox/file2.txt"); // Datei kopieren
    fs::copy("sandbox/dir", "sandbox/dir2"); // Verzeichnis kopieren (nicht rekursiv)
    const auto copyOptions = fs::copy_options::update_existing
                           | fs::copy_options::recursive
                           | fs::copy_options::directories_only
                           ;
    fs::copy("sandbox", "sandbox_copy", copyOptions); 
    static_cast<void>(std::system("tree"));
    fs::remove_all("sandbox");
    fs::remove_all("sandbox_copy");
}

Mögliche Ausgabe:

.
├── sandbox
│   ├── dir
│   │   └── subdir
│   ├── dir2
│   ├── file1.txt
│   └── file2.txt
└── sandbox_copy
    ├── dir
    │   └── subdir
    └── dir2
8 Verzeichnisse, 2 Dateien

Siehe auch

(C++17)
kopiert Dateien oder Verzeichnisse
(Funktion)
(C++17)
kopiert Dateiinhalte
(Funktion)