Comment deplacer un fichier en C ? [Résolu/Fermé]

Signaler
Messages postés
125
Date d'inscription
dimanche 10 août 2008
Statut
Membre
Dernière intervention
7 janvier 2013
-
fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
-
Bonjour,

Suis sous LINUX.
Voici mon probleme et je sollicte vos aides.
J'ai un fichier dans un depot: DEPOT_SOURCE nommé mon_fichier1.
Je voudrai deplacer ce fichier dans un autre depot: DEPOT_DEST sous le même nom.Et biensûr, je veux pas le garder dans depot source.
On m'a parlé de la fonction
move()
qui n'est pas portable. Aussi certains parlent de la fonction
rename()
. Disons j'utilise rename mais comment cela entrainera t il le deplacement de mon fichier.
par exemple:
rename("DEPOT_SOURCE/mon_fichier1", "DEPOT_DEST/mon_fichier1");

dejà j'ai pas de resultat en faisant ça. Merci.

3 réponses

Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 629
Bonjour,

En C standard, il n'y a pas de fonction de déplacement, ni de copie.
Il va donc falloir la créer. Le principe est simple :
Tu ouvres le fichier à l'endroit de destination en mode write.
Tu ouvres le fichier source en mode read.
Et tu parcours avec une bête boucle while fgets pour recopier dans le fichier de destination.

Et tu n'oublies pas de supprimer le fichier source.

Si tu as besoin d'aide pour la mise en place de la fonction, n'hésite pas à demander.

Cdlt,
Messages postés
125
Date d'inscription
dimanche 10 août 2008
Statut
Membre
Dernière intervention
7 janvier 2013
4
Bonjour fiddy,

J'ai des fichiers de 150 Go, j'ai dejà fait cette methode, goulo d'etranglement pour mon programme en accès disque tout le temps pour ça.
Le plus simple c'est de renommer le fichier, je crois ke ça peut resoudre.

Merci pour ton aide. Sinon pourquoi on ne pense pas à ajouter ces fonctions de base au standard C. Vraiment, je pensais pas ke les programmeurs etaient aussi paresseux juskà ce point.
Messages postés
9713
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
13 septembre 2019
1 118
rename() est la fonction standard pour déplacer un fichier, du moins sur le même volume. Dans un précédent message, nous étions tombé daccord sur le fait que rename() était la meilleur solution et la plus propre pour déplacer un fichier (je te laisse le soin de trouver le message).
En revanche, je ne suis pas d'accord avec fiddy sur la standardisation. Voilà ce que j'ai trouvé :
[...] the C standard library, which is specified by the ISO and ANSI C standards and comes with every C implementation [...] ( http://en.wikipedia.org/wiki/C_%28programming_language%29#Libraries ), sachant que rename en fait parti dans stdio.h ( http://en.wikipedia.org/wiki/Stdio.h )
au sujet de ta remarque sur la paresse des programmeurs, il ne faut pas tout confondre : le bibliothèques du standard, celles de l'OS et celles que l'on peut trouver un peu partout. Sur Linux, les bibliothèques C contiennent bien d'autres options/fonctions par rapport au standard. Mais comme elles ne font pas partie du standard, il vaut mieux les éviter pour conserver la portabilité.
youscoul
Messages postés
125
Date d'inscription
dimanche 10 août 2008
Statut
Membre
Dernière intervention
7 janvier 2013
4
Merci,

Mon problème est resolu grâce à la fonction rename().
En effet, j'avais pas les droits d'ecrire dans mon DEPOT_DEST.
Donc sous linux, en mettant mkdir( depot, 0777) c'est ok.
Pour windows, il suffit de faire proprietés du dossier et decocher la case "Lecture seule".
A conseiller, rename est bien la fonction la plus simple pour deplacer un ficher en c au lieu de faire des fread et fwrite qui sont coutées en accès disque.Merci encore à fiddy et Char Snipeur.

" Ingorant ne veux pas dire qu'on ne connait rien, mais qu'on refuse de donner raison aux autres si on se rend compte"
fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 629
Shame on me. J'ai omis que rename() permettait le déplacement. Mais oui bien sûr, rename() est standard aucun doute à ce sujet.

Néanmoins, il n'existe pas de fonction standard de copie.