Comment copier un fichier de manière efficace et en toute sécurité
Lors de la copie de fichiers, il est essentiel de prendre en compte l'efficacité et la sécurité pour éviter la perte de données et garantir la l'intégrité du fichier copié. Plusieurs méthodes peuvent être utilisées, chacune avec ses forces et ses faiblesses :
1. Bibliothèque standard C (iostream) :
#include <iostream> #include <fstream> int main() { std::ifstream source("from.ogv", std::ios::binary); std::ofstream destination("to.ogv", std::ios::binary); destination << source.rdbuf(); }
Avantages : Simple et intuitif. Sûr car il utilise des flux standard.
Inconvénients : Pas aussi efficace que les méthodes de niveau inférieur.
2. POSIX (ouvrir, lire, écrire) :
#include <fcntl.h> #include <unistd.h> int main() { int source = open("from.ogv", O_RDONLY, 0); int destination = open("to.ogv", O_WRONLY | O_CREAT, 0644); char buffer[BUFSIZ]; while ((size_t)read(source, buffer, BUFSIZ) > 0) { write(destination, buffer, size); } }
Avantages :Efficace et de bas niveau.
Inconvénients :Non aussi sûr que les flux standards. Nécessite une gestion manuelle de la mémoire.
3. Appel système mmap() :
#include <sys/mman.h> #include <sys/stat.h> #include <fcntl.h> int main() { int source = open("from.ogv", O_RDONLY, 0); int destination = open("to.ogv", O_WRONLY | O_CREAT, 0644); struct stat stat_source; fstat(source, &stat_source); char *source_ptr = (char *)mmap(NULL, stat_source.st_size, PROT_READ, MAP_PRIVATE, source, 0); char *destination_ptr = (char *)mmap(NULL, stat_source.st_size, PROT_WRITE, MAP_PRIVATE, destination, 0); memcpy(destination_ptr, source_ptr, stat_source.st_size); }
Avantages :Efficace et rapide. Pas besoin de gestion explicite de la mémoire.
Inconvénients : Complexe à mettre en œuvre et nécessite un mappage manuel de la mémoire.
4. boost::filesystem::copy_file:
#include <boost/filesystem.hpp> int main() { boost::filesystem::copy_file("from.ogv", "to.ogv", boost::filesystem::copy_option::overwrite_if_exists); }
Avantages : Portable et facile à utiliser. Robuste et sûr en cas d'erreurs.
Inconvénients : Nécessite une bibliothèque externe. Peut ne pas être aussi efficace que les méthodes de bas niveau.
Facteurs à prendre en compte :
Recommandations :
Pour la copie de fichiers à usage général avec la sécurité comme priorité, iostream ou boost::filesystem::copy_file est recommandé.
Pour une efficacité et des performances maximales, POSIX ou mmap() peuvent être utilisés, mais des précautions supplémentaires doivent être prises pour assurer une bonne gestion de la mémoire et une gestion des erreurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!