Namespaces
Variants

std::filesystem:: copy_file

From cppreference.net
Défini dans l'en-tête <filesystem>
bool copy_file ( const std:: filesystem :: path & from,
const std:: filesystem :: path & to ) ;
(1) (depuis C++17)
bool copy_file ( const std:: filesystem :: path & from,

const std:: filesystem :: path & to,

std:: error_code & ec ) ;
(2) (depuis C++17)
(3) (depuis C++17)
(4) (depuis C++17)
1,2) La valeur par défaut, équivalente à (3,4) avec copy_options::none utilisé comme options .
3,4) Copie un fichier unique de from vers to , en utilisant les options de copie indiquées par options . Le comportement est indéfini s'il y a plus d'une option dans l'un des copy_options groupes d'options présent dans options (même dans les groupes non pertinents pour filesystem::copy_file ).
  • Si !filesystem::is_regular_file(from) (soit parce que le fichier source n'existe pas, soit parce que ce n'est pas un fichier régulier), signale une erreur.
  • Sinon, si le fichier de destination n'existe pas,
  • copie le contenu et les attributs du fichier vers lequel from pointe vers le fichier vers lequel to pointe (les liens symboliques sont suivis).
  • Sinon, si le fichier de destination existe déjà,
  • signale une erreur si l'une des conditions suivantes est vraie :
  • Sinon, si copy_options::skip_existing est défini dans options , ne rien faire.
  • Sinon, si copy_options::overwrite_existing est défini dans options , copie le contenu et les attributs du fichier vers lequel from pointe vers le fichier vers lequel to pointe.
  • Sinon, si copy_options::update_existing est défini dans options , copie le fichier uniquement si from est plus récent que to , tel que défini par filesystem::last_write_time() .

Les surcharges non levantes retournent false si une erreur survient.

Table des matières

Paramètres

from - chemin vers le fichier source
to - chemin vers le fichier cible
ec - paramètre de sortie pour le rapport d'erreur dans la surcharge non-lancée

Valeur de retour

true si le fichier a été copié, false sinon.

Exceptions

Toute surcharge non marquée noexcept peut lever std::bad_alloc si l'allocation de mémoire échoue.

1,3) Lance std::filesystem::filesystem_error en cas d'erreurs de l'API système sous-jacente, construit avec from comme premier argument de chemin, to comme deuxième argument de chemin, et le code d'erreur du système comme argument de code d'erreur.
2,4) Définit un paramètre std:: error_code & au code d'erreur de l'API du système d'exploitation si un appel d'API système échoue, et exécute ec. clear ( ) si aucune erreur ne survient.

Notes

Les fonctions impliquent au plus un appel direct ou indirect à filesystem::status(to) (utilisé à la fois pour déterminer si le fichier existe, et, pour l'option filesystem::copy_options::update_existing , son heure de dernière modification).

Une erreur est signalée lorsque filesystem::copy_file est utilisé pour copier un répertoire : utilisez filesystem::copy pour cela.

filesystem::copy_file suit les liens symboliques : utilisez filesystem::copy_symlink ou filesystem::copy avec filesystem::copy_options::copy_symlinks pour cela.

Exemple

#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");
    // maintenant il y a deux fichiers dans sandbox :
    std::cout << "file1.txt contient : "
              << std::ifstream("sandbox/file1.txt").rdbuf() << '\n';
    std::cout << "file2.txt contient : "
              << std::ifstream("sandbox/file2.txt").rdbuf() << '\n';
    // échec de copie du répertoire
    fs::create_directory("sandbox/abc");
    try
    {
        fs::copy_file("sandbox/abc", "sandbox/def");
    }
    catch (fs::filesystem_error& e)
    {
        std::cout << "Impossible de copier sandbox/abc : " << e.what() << '\n';
    }
    fs::remove_all("sandbox");
}

Sortie possible :

file1.txt contient : a
file2.txt contient : a
Impossible de copier sandbox/abc : copy_file: Is a directory: "sandbox/abc", "sandbox/def"

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR S'applique à Comportement publié Comportement corrigé
LWG 3014 C++17 error_code surcharge marquée noexcept mais peut allouer de la mémoire noexcept supprimé

Voir aussi

spécifie la sémantique des opérations de copie
(énumération)
copie un lien symbolique
(fonction)
(C++17)
copie des fichiers ou répertoires
(fonction)