std::filesystem::copy_file
| Definiert in Header <filesystem> |
||
| bool copy_file( const std::filesystem::path& from, const std::filesystem::path& to ); |
(1) | (seit C++17) |
| bool copy_file( const std::filesystem::path& from, const std::filesystem::path& to, |
(2) | (seit C++17) |
| bool copy_file( const std::filesystem::path& from, const std::filesystem::path& to, |
(3) | (seit C++17) |
| bool copy_file( const std::filesystem::path& from, const std::filesystem::path& to, |
(4) | (seit C++17) |
- Wenn !filesystem::is_regular_file(from) (entweder weil die Quelldatei nicht existiert oder weil es sich nicht um eine reguläre Datei handelt), wird ein Fehler gemeldet.
- Andernfalls, wenn die Zieldatei nicht existiert,
- kopiert den Inhalt und die Attribute der Datei, auf die from verweist, in die Datei, auf die to verweist (Symlinks werden verfolgt).
- Andernfalls, wenn die Zieldatei bereits existiert,
- meldet einen Fehler, wenn eine der folgenden Bedingungen zutrifft:
- to und from sind identisch, wie durch filesystem::equivalent(from, to) bestimmt;
- to ist keine reguläre Datei, wie durch !filesystem::is_regular_file(to) bestimmt;
- keine der filesystem::copy_file Steuerungsoptionen sind in options gesetzt.
- Andernfalls, wenn `copy_options::skip_existing` in options gesetzt ist, tue nichts.
- Andernfalls, wenn `copy_options::overwrite_existing` in options gesetzt ist, kopiere den Inhalt und die Attribute der Datei, auf die from verweist, in die Datei, auf die to verweist.
- Andernfalls, wenn `copy_options::update_existing` in options gesetzt ist, kopiere die Datei nur, wenn from neuer ist als to, wie durch filesystem::last_write_time() definiert.
Die nicht-werfenden Überladungen geben false zurück, wenn ein Fehler auftritt.
Inhalt |
[edit] Parameter
| from | - | Pfad zur Quelldatei |
| to | - | Pfad zur Zieldatei |
| ec | - | Ausgabeparameter für die Fehlerberichterstattung in der nicht auslösenden Überladung |
[edit] Rückgabewert
true, wenn die Datei kopiert wurde, false andernfalls.
[edit] Ausnahmen
Jede Überladung, die nicht als noexcept markiert ist, kann std::bad_alloc auslösen, wenn die Speicherzuweisung fehlschlägt.
[edit] Hinweise
Die Funktionen beinhalten höchstens einen direkten oder indirekten Aufruf von filesystem::status(to) (verwendet, um festzustellen, ob die Datei existiert, und für die Option `filesystem::copy_options::update_existing`, deren letzte Schreibzeit).
Fehler wird gemeldet, wenn filesystem::copy_file zum Kopieren eines Verzeichnisses verwendet wird: Verwenden Sie stattdessen filesystem::copy.
filesystem::copy_file folgt Symlinks: Verwenden Sie stattdessen filesystem::copy_symlink oder filesystem::copy mit `filesystem::copy_options::copy_symlinks`.
[edit] Beispiel
#include <filesystem> #include <fstream> #include <iostream> namespace fs = std::filesystem; int main() { fs::create_directory("sandbox"); std::ofstream("sandbox/file1.txt").put('a'); fs::copy_file("sandbox/file1.txt", "sandbox/file2.txt"); // now there are two files in sandbox: std::cout << "file1.txt holds: " << std::ifstream("sandbox/file1.txt").rdbuf() << '\n'; std::cout << "file2.txt holds: " << std::ifstream("sandbox/file2.txt").rdbuf() << '\n'; // fail to copy directory fs::create_directory("sandbox/abc"); try { fs::copy_file("sandbox/abc", "sandbox/def"); } catch (fs::filesystem_error& e) { std::cout << "Could not copy sandbox/abc: " << e.what() << '\n'; } fs::remove_all("sandbox"); }
Mögliche Ausgabe
file1.txt holds: a file2.txt holds: a Could not copy sandbox/abc: copy_file: Is a directory: "sandbox/abc", "sandbox/def"
[edit] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 3014 | C++17 | error_code-Überladung als noexcept markiert, kann aber Speicher allokieren |
noexcept entfernt |
[edit] Siehe auch
| (C++17) |
spezifiziert die Semantik von Kopiervorgängen (Enum) |
| (C++17) |
kopiert einen symbolischen Link (Funktion) |
| (C++17) |
kopiert Dateien oder Verzeichnisse (Funktion) |