Comment puis-je copier un fichier d'un répertoire à un autre en c/c++
Je suis à la recherche d'un exemple simple sur la façon de copier un fichier d'un répertoire à un autre en C. Le programme doit utiliser uniquement de la croix-plate-forme de fonctions natives de C.
- "Indigènes", les fonctions sont à peu près le contraire de "cross-plateforme" des fonctions. Les fonctions natives sont ceux qui sont "de souche", pour un OS, et donc spécifiques. "Cross-plateforme" fonctions sont disponibles partout, par la vertu d'être construit au-dessus de ces fonctions natives.
- Vous pouvez utiliser
#ifdef
#else
et#endif
ceux de pré-traitement des blocs à l'appel de la plate-forme, les fonctions liées et laisser le compilateur prendre la décision en appel. - Bien dit, mais je pense que le démarrage d'une question avec "je cherche", indique un non-anglophone. :-/ J'ai moi-même interpréter l'OP est le sens est qu'il/elle voulait utiliser une bibliothèque que sous le capot appelle "copier le fichier" indigènes. Il serait dès lors d'exclure le (malheureusement) upvoted réponses ici sur le déploiement de son propre copie basée sur la simple lecture d'un fichier et de l'écriture à l'autre...
Vous devez vous connecter pour publier un commentaire.
Ici est un simple non testé un programme C qui fait ce que vous avez besoin de:
Je suis sûr que vous pouvez le faire!
@Mu Qiao mentionné
boost::filesystem
. Vous souhaitez chercher des exemples decopy_file
, si vous pouvez copier des répertoires.Si vous êtes intéressés à obtenir de fantaisie avec des e/S asynchrones, mon impression est que
boost::asio
est intéressant de mises en prendre avantage de la plate-forme de capacités pour vous permettre d'utiliser le CPU lors de l'attente pour le disque, comme il le fait pour le réseau:Comment effectuer la Croix-Plate-forme de Fichier Asynchrone I/O en C++
(Note: Dernièrement, le pilote asio de la bibliothèque a été à venir à l'esprit ces derniers temps beaucoup de choses, mais j'ai toujours offrir l'avertissement que je ne l'ai pas utilisé dans un projet et avez aucune idée de ce que ses limites. Afin de prendre ma mention de cela avec un grain de sel.)
Il y a d'autres croix-plate-forme de bibliothèques offrant ce type de fonctionnalité, si vous êtes prêt à faire le buy-in, toujours une question de goût et besoins. Moi, j'aime Qt pour beaucoup de raisons, et il arrive à offrir un
QFile::copy
méthode:http://doc.qt.nokia.com/latest/qfile.html#copy
Une autre alternative est quelque chose comme ceci:
...
source
de"foo.txt bar.txt"
et undest
de"& del *.*"
...l'esperluette faisant de la chaîne de l'ensemble des commandes que"copy foo.txt bar.txt & del *.*"
. Rappelez-vous toujours Bobby Tables!!! xkcd.com/327boost::filesystem::copy_file
n'est pas l'objet de telles préoccupations. Et je ne mentionne Windows parce que votre premier exemple de chaîne a étéCOPY_STR "copy %s %s"
(au lieu de, disonsCOPY_STR "cp %s %s"
). Le même genre de méfait est possible lorsque vous utilisez cette classe de la technique dans tous les OS, si jamais vous passez une chaîne qui provient d'une source en plus d'une valeur codée en dur dans votre programme. Nettoyage devient un problème, et souvent très au sérieux.J'ai apporté quelques modifications à @te7 réponse pour copier un fichier d'un dossier à un autre sur MAC. J'ai essayé de modifier son code il suffit de copier un fichier, mais il a été partiellement de l'écriture du fichier de destination. Donc j'utilise un code différent pour le fichier en lecture/écriture