Namespaces
Variants

std::filesystem:: copy_file

From cppreference.net
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,

std:: error_code & ec ) ;
(2) (seit C++17)
(3) (seit C++17)
(4) (seit C++17)
1,2) Die Standardeinstellung, äquivalent zu (3,4) mit copy_options::none verwendet als options .
3,4) Kopiert eine einzelne Datei von from nach to , unter Verwendung der durch options angegebenen Kopieroptionen. Das Verhalten ist undefiniert, wenn in einer der copy_options Optionsgruppen mehr als eine Option in options vorhanden ist (selbst in den für filesystem::copy_file irrelevanten Gruppen).
  • 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:
  • Andernfalls, wenn copy_options::skip_existing in options gesetzt ist, wird nichts unternommen.
  • Andernfalls, wenn copy_options::overwrite_existing in 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_existing in 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.

1,3) Wirft std::filesystem::filesystem_error bei zugrundeliegenden OS-API-Fehlern, konstruiert mit from als erstem Pfadargument, to als zweitem Pfadargument und dem OS-Fehlercode als Fehlercode-Argument.
2,4) Setzt einen std:: error_code & Parameter auf den OS-API-Fehlercode, wenn ein OS-API-Aufruf fehlschlägt, und führt ec. clear ( ) aus, falls keine Fehler auftreten.

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

legt die Semantik von Kopiervorgängen fest
(enum)
kopiert einen symbolischen Link
(function)
(C++17)
kopiert Dateien oder Verzeichnisse
(function)