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:
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.
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.
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é.
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"