Namensräume
Varianten
Aktionen

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_existing in options gesetzt ist, wird nichts unternommen.
  • Andernfalls, wenn copy_options::overwrite_existing in 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_existing in 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 hat
noexcept-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

#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) [bearbeiten]
kopiert einen symbolischen Link
(Funktion) [bearbeiten]
kopiert Dateien oder Verzeichnisse
(Funktion) [bearbeiten]