std::experimental::filesystem::copy_file
Von cppreference.com
< cpp | experimental | fs
| Definiert im Header <experimental/filesystem> |
||
| bool copy_file( const path& from, const path& to ); bool copy_file( const path& from, const path& to, error_code& ec ); |
(1) | (Dateisystem-TS) |
| bool copy_file( const path& from, const path& to, copy_options options ); bool copy_file( const path& from, const path& to, copy_options options, error_code& ec ); |
(2) | (Dateisystem-TS) |
1) Die Standardvariante, äquivalent zu (2) mit `copy_options::none` als options.
2) Kopiert eine einzelne Datei von from nach to unter Verwendung der durch options angegebenen Kopiervorgänge. Das Verhalten ist undefiniert, wenn mehr als eine Option in einer der copy_options-Optionsgruppen in options vorhanden ist (auch in den Gruppen, die für
copy_file nicht relevant sind).- Wenn die Zieldatei nicht existiert,
- werden der Inhalt und die Attribute der Datei, auf die from aufgelöst wird, in die Datei kopiert, auf die to aufgelöst wird (Symbolische Links werden verfolgt).
- Andernfalls, wenn die Zieldatei bereits existiert
- Wenn to und from gemäß equivalent(from, to) identisch sind, wird ein Fehler gemeldet.
- Andernfalls, wenn keine der Steueroptionen von copy_file in options gesetzt ist, wird ein Fehler gemeldet.
- Andernfalls, wenn
copy_options::skip_existingin options gesetzt ist, wird nichts unternommen. - Andernfalls, wenn
copy_options::overwrite_existingin options gesetzt ist, werden der Inhalt und die Attribute der Datei, auf die from aufgelöst wird, in die Datei kopiert, auf die to aufgelöst wird. - Andernfalls, wenn
copy_options::update_existingin options gesetzt ist, wird die Datei nur kopiert, wenn from neuer ist als to, wie durch last_write_time() definiert.
Die nicht-werfenden Überladungen geben false zurück, wenn ein Fehler auftritt.
Inhalt |
[bearbeiten] Parameter
| from | - | Pfad zur Quelldatei |
| to | - | Pfad zur Zieldatei |
| ec | - | Ausgabeparameter für die Fehlerberichterstattung in der nicht auslösenden Überladung |
[bearbeiten] Rückgabewert
true, wenn die Datei kopiert wurde, false andernfalls.
[bearbeiten] Ausnahmen
Die Überladung, die keinen error_code&-Parameter annimmt, wirft filesystem_error bei zugrunde liegenden Betriebssystem-API-Fehlern, konstruiert mit from als erstem Argument, to als zweitem Argument und dem Betriebssystem-Fehlercode als Fehlercode-Argument. std::bad_alloc kann geworfen werden, wenn die Speicherzuweisung fehlschlägt. Die Überladung, die einen error_code&-Parameter annimmt, setzt diesen auf den Betriebssystem-API-Fehlercode, wenn ein Betriebssystem-API-Aufruf fehlschlägt, und führt ec.clear() aus, wenn keine Fehler auftreten. Diese Überladung hatnoexcept-Spezifikation:
noexcept
[bearbeiten] Hinweise
Die Funktionen beinhalten höchstens einen direkten oder indirekten Aufruf von status(to) (verwendet sowohl zur Bestimmung, ob die Datei existiert, als auch, für die Option copy_options::update_existing, ihrer letzten Schreibzeit).
Ein Fehler wird gemeldet, wenn copy_file zum Kopieren eines Verzeichnisses verwendet wird: Verwenden Sie stattdessen copy.
copy_file folgt Symbolischen Links: Verwenden Sie copy_symlink oder copy mit copy_options::copy_symlinks dafür.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <experimental/filesystem> #include <fstream> #include <iostream> namespace fs = std::experimental::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"
[bearbeiten] Siehe auch
| spezifiziert die Semantik von Kopiervorgängen (Aufzählung) | |
| kopiert einen symbolischen Link (Funktion) | |
| kopiert Dateien oder Verzeichnisse (Funktion) |