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) |
copy_options::none
verwendet als
options
.
- Wenn !filesystem::is_regular_file(from) (entweder weil die Quelldatei nicht existiert oder weil sie keine reguläre Datei ist), wird ein Fehler gemeldet.
- Andernfalls, wenn die Zieldatei nicht existiert,
-
- werden die Inhalte und Attribute der Datei, auf die from verweist, in die Datei kopiert, auf die to verweist (Symlinks werden befolgt).
- Andernfalls, wenn die Zieldatei bereits existiert,
-
- wird ein Fehler gemeldet, wenn eine der folgenden Bedingungen zutrifft:
-
- to und from sind identisch gemäß filesystem::equivalent(from, to) ;
- to ist keine reguläre Datei gemäß !filesystem::is_regular_file(to) ;
- keine der filesystem::copy_file Steueroptionen in options gesetzt ist.
-
Andernfalls, wenn
copy_options::skip_existingin options gesetzt ist, wird nichts unternommen. -
Andernfalls, wenn
copy_options::overwrite_existingin options gesetzt ist, werden die Inhalte und Attribute der Datei, auf die from verweist, in die Datei kopiert, auf die to verweist. -
Andernfalls, wenn
copy_options::update_existingin options gesetzt ist, wird die Datei nur kopiert, wenn from neuer als to ist, definiert durch filesystem::last_write_time() .
Die nicht-werfenden Überladungen geben false zurück, falls ein Fehler auftritt.
Inhaltsverzeichnis |
Parameter
| from | - | Pfad zur Quelldatei |
| to | - | Pfad zur Zieldatei |
| ec | - | Out-Parameter für Fehlerberichterstattung in der nicht-werfenden Überladung |
Rückgabewert
true wenn die Datei kopiert wurde, false andernfalls.
Ausnahmen
Jede Überladung, die nicht als
noexcept
gekennzeichnet ist, kann
std::bad_alloc
auslösen, wenn die Speicherallokation fehlschlägt.
Hinweise
Die Funktionen beinhalten höchstens einen direkten oder indirekten Aufruf von
filesystem::status(to)
(wird sowohl verwendet, um zu bestimmen, ob die Datei existiert, als auch, für die
filesystem::copy_options::update_existing
Option, deren letzte Schreibzeit).
Es wird ein Fehler gemeldet, wenn filesystem::copy_file verwendet wird, um ein Verzeichnis zu kopieren: verwenden Sie filesystem::copy dafür.
filesystem::copy_file
folgt symbolischen Links: verwenden Sie
filesystem::copy_symlink
oder
filesystem::copy
mit
filesystem::copy_options::copy_symlinks
dafür.
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"); // jetzt gibt es zwei Dateien im sandbox-Verzeichnis: std::cout << "file1.txt enthält: " << std::ifstream("sandbox/file1.txt").rdbuf() << '\n'; std::cout << "file2.txt enthält: " << std::ifstream("sandbox/file2.txt").rdbuf() << '\n'; // Fehler beim Kopieren des Verzeichnisses fs::create_directory("sandbox/abc"); try { fs::copy_file("sandbox/abc", "sandbox/def"); } catch (fs::filesystem_error& e) { std::cout << "Konnte sandbox/abc nicht kopieren: " << e.what() << '\n'; } fs::remove_all("sandbox"); }
Mögliche Ausgabe:
file1.txt enthält: a file2.txt enthält: a Konnte sandbox/abc nicht kopieren: copy_file: Is a directory: "sandbox/abc", "sandbox/def"
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 allozieren
|
noexcept entfernt |
Siehe auch
|
(C++17)
|
legt die Semantik von Kopiervorgängen fest
(enum) |
|
(C++17)
|
kopiert einen symbolischen Link
(function) |
|
(C++17)
|
kopiert Dateien oder Verzeichnisse
(function) |