std::experimental::filesystem:: copy
From cppreference.net
<
cpp
|
experimental
|
fs
|
Défini dans l'en-tête
<experimental/filesystem>
|
||
|
void
copy
(
const
path
&
from,
const
path
&
to
)
;
void copy ( const path & from, const path & to, error_code & ec ) ; |
(1) | (filesystem TS) |
|
void
copy
(
const
path
&
from,
const
path
&
to, copy_options options
)
;
void copy ( const path & from, const path & to, copy_options options, error_code & ec ) ; |
(2) | (filesystem TS) |
Copie les fichiers et répertoires, avec diverses options :
1)
La valeur par défaut, équivalente à
(2)
avec
copy_options::none
utilisé comme
options
.
2)
Copie le fichier ou le répertoire
from
vers le fichier ou le répertoire
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ésents dans
options
(même dans le groupe
copy_file
, qui n'est pas pertinent pour
copy
).
Le comportement est le suivant :
-
Premièrement, avant toute autre opération, obtient le type et les permissions de
from
par pas plus d'un seul appel à
status
(ou, si
copy_options::skip_symlinksoucopy_options::create_symlinkssont présents dans options , par un appel àsymlink_status). - Si nécessaire, obtient le statut de to de la même manière, par pas plus d'un seul appel à status ou symlink_status.
- Si from n'existe pas, signale une erreur.
- Si from et to sont le même fichier tel que déterminé par equivalent() , signale une erreur.
- Si soit from soit to n'est pas un fichier régulier, un répertoire ou un lien symbolique, tel que déterminé par is_other , signale une erreur.
- Si from est un répertoire, mais to est un fichier régulier, signale une erreur.
- Si from est un lien symbolique, alors
-
-
Si
copy_options::skip_symlinkest présent dans options , ne fait rien. -
Sinon, si
to
n'existe pas et que
copy_options::copy_symlinksest présent dans options , alors se comporte comme copy_symlink ( from, to ) . - Sinon, signale une erreur.
-
Si
- Sinon, si from est un fichier ordinaire, alors
-
-
Si
copy_options::directories_onlyest présent dans options , ne fait rien. -
Sinon, si
copy_options::create_symlinksest présent dans options , crée un lien symbolique vers to . Note : from doit être un chemin absolu sauf si to est dans le répertoire courant. -
Sinon, si
copy_options::create_hard_linksest présent dans options , crée un lien physique vers to . - Sinon, si to est un répertoire, alors se comporte comme copy_file ( from, to / from. filename ( ) , options ) (crée une copie de from en tant que fichier dans le répertoire to ).
- Sinon, se comporte comme copy_file ( from, to, options ) (copie le fichier).
-
Si
-
Sinon, si
from
est un répertoire et que soit
options
contient
copy_options::recursive, soit estcopy_options::none.
-
- Si to n'existe pas, exécute d'abord create_directory ( to, from ) (crée le nouveau répertoire avec une copie des attributs de l'ancien répertoire).
-
Ensuite, que
to
existe déjà ou ait été créé, itère sur les fichiers contenus dans
from
comme si par
for
(
const
directory_entry
&
x
:
directory_iterator
(
from
)
)
et pour chaque entrée de répertoire, appelle récursivement
copy
(
x.
path
(
)
, to
/
x.
path
(
)
.
filename
(
)
, options
|
unspecified
)
, où
unspecified
est un bit spécial qui n'a aucun autre effet lorsqu'il est défini dans
options
(le seul but de définir ce bit est d'empêcher la copie récursive des sous-répertoires si
options
est
copy_options::none).
- Sinon, ne fait rien.
Table des matières |
Paramètres
| from | - | chemin vers le fichier source, répertoire ou lien symbolique |
| to | - | chemin vers le fichier cible, répertoire ou lien symbolique |
| ec | - | paramètre de sortie pour le rapport d'erreurs dans la surcharge non-lancante |
Valeur de retour
(aucun)
Exceptions
The overload that does not take an error_code & parameter throws filesystem_error on underlying OS API errors, constructed with from as the first argument, vers as the second argument, and the OS error code as the error code argument. std:: bad_alloc **Note:** Le texte a été laissé en anglais car : 1. Il contient des balises HTML qui ne doivent pas être traduites 2. Il s'agit de code C++ (`std::bad_alloc`) qui ne doit pas être traduit 3. C'est un terme technique spécifique au C++ qui doit rester en anglais pour la précision technique La structure HTML et le contenu des balises de code sont restés identiques à l'original, conformément aux instructions. may be thrown if memory allocation fails. The overload taking an error_code & parameter sets it to the OS API error code if an OS API call fails, and executes ec. clear ( ) if no errors occur. This overload has
noexcept
spécification :
noexcept
Notes
Le comportement par défaut lors de la copie de répertoires est la copie non récursive : les fichiers sont copiés, mais pas les sous-répertoires :
// Étant donné // /dir1 contient /dir1/file1, /dir1/file2, /dir1/dir2 // et /dir1/dir2 contient /dir1/dir2/file3 // Après std::experimental::filesystem::copy("/dir1", "/dir3"); // /dir3 est créé (avec les attributs de /dir1) // /dir1/file1 est copié vers /dir3/file1 // /dir1/file2 est copié vers /dir3/file2
Alors qu'avec
copy_options::recursive
, les sous-répertoires sont également copiés, avec leur contenu, de manière récursive.
// ...mais après std::experimental::filesystem::copy("/dir1", "/dir3", copy_options::recursive); // /dir3 est créé (avec les attributs de /dir1) // /dir1/file1 est copié vers /dir3/file1 // /dir1/file2 est copié vers /dir3/file2 // /dir3/dir2 est créé (avec les attributs de /dir1/dir2) // /dir1/dir2/file3 est copié vers /dir3/dir2/file3
Exemple
Exécuter ce code
#include <experimental/filesystem> #include <fstream> #include <iostream> namespace fs = std::experimental::filesystem; int main() { fs::create_directories("sandbox/dir/subdir"); std::ofstream("sandbox/file1.txt").put('a'); fs::copy("sandbox/file1.txt", "sandbox/file2.txt"); // copier le fichier fs::copy("sandbox/dir", "sandbox/dir2"); // copier le répertoire (non récursif) // sandbox contient 2 fichiers et 2 répertoires, dont un avec un sous-répertoire // sandbox/file1.txt // sandbox/file2.txt // sandbox/dir2 // sandbox/dir // sandbox/dir/subdir fs::copy("sandbox", "sandbox/copy", fs::copy_options::recursive); // sandbox/copy contient des copies des fichiers et sous-répertoires ci-dessus fs::remove_all("sandbox"); }
Voir aussi
|
spécifie la sémantique des opérations de copie
(énumération) |
|
|
copie un lien symbolique
(fonction) |
|
|
copie le contenu d'un fichier
(fonction) |