Comment deplacer un fichier en C ?

Résolu/Fermé
youscoul Messages postés 125 Date d'inscription dimanche 10 août 2008 Statut Membre Dernière intervention 7 janvier 2013 - 29 juin 2010 à 23:52
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 30 juin 2010 à 19:36
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.

A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
30 juin 2010 à 00:21
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,
0
youscoul Messages postés 125 Date d'inscription dimanche 10 août 2008 Statut Membre Dernière intervention 7 janvier 2013 4
30 juin 2010 à 00:39
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.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
30 juin 2010 à 08:26
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 [...] ( https://en.wikipedia.org/wiki/C_%28programming_language%29#Libraries ), sachant que rename en fait parti dans stdio.h ( https://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é.
0
youscoul Messages postés 125 Date d'inscription dimanche 10 août 2008 Statut Membre Dernière intervention 7 janvier 2013 4
30 juin 2010 à 14:30
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"
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
30 juin 2010 à 19:36
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.
0