Rechercher : dans
Par :

[C] renommer un fichier

Dernière réponse le 26 oct 2006 à 15:22:33 neolistic, le 25 oct 2006 à 00:07:41 
 Signaler ce message aux modérateurs

Bonjour à tous!

Je veux faire un programme de renommage automatique de fichiers en C sur linux:
Questions surement idiotes:
- Comment renommer un fichier sans le copier?
- Est ce que ce renommage permet un "déplacement"?
- Comment m'y prendre pour trouver tout seul ce genre de fonctionnalités lorsqu'elles ont déjà été implémentés?(pas trop de docs contrairement à java...)

Merci!
A+ Si tu crois etre perdu, revient sur tes pas.

Meilleures réponses pour « [C] renommer un fichier » dans :
Renommer plusieurs fichiers en batch VoirLe fait de renommer un grand nombre de fichiers peut très vite devenir fastidieux. Heureusement, il existe des outils permettant d'automatiser cette tâche dans un grand nombre de cas : Fonctionnalités natives Utilisation d'un programme...
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
Compiler du C sous Linux/UNIX VoirSous Linux, le compilateur de C est gcc. Il est installé de base sur plusieurs distributions, mais sur Debian (et celles qui en découlent) il faudra l'installer (aptitude install gcc). gcc Syntaxe de GCC gcc Tout d'abord, il faut savoir...

1

mamiemando, le 25 oct 2006 à 00:19:45

Renommer = Déplacer si le fichier reste sur le même device
Pour renommer/déplacer un fichier le plus simple c'est de le faire directement dans une console shell :

mv ancien_nom nouveau_nom

Le C te permet de d'appeler une fonction shell facilement. Tape dans google ou dans une console :
man execvp
man popen

pour voir comment ça marche.

Bon évidemment c'est pas top car ton programme ne pourra marcher que sous linux mais bon... Au fait pourquoi veux tu faire ça en C car ce n'est pas le langage le plus adapté, par exemple comparé à du bash.

Bonne chance

Répondre à mamiemando

2

neolistic, le 25 oct 2006 à 09:49:19

Je veux faire ca en C car le nom du fichier se construit à partir de données à l'intérieur de celui ci (TAG d'un mp3) et je ne sais pas lire précisément un fichier en bash (et je ne sais meme pas si c'est possible)

J'ai effectivement pensé à l'appel de mv avec exec mais je voudrais vraiment savoir comment on peut le faire au niveau systeme! Si tu crois etre perdu, revient sur tes pas.

Répondre à neolistic

3

Char Snipeur, le 25 oct 2006 à 17:30:21

Il existe une fonction rename() en C
int rename (const char*, const char*);
dans "stdio.h"
Si tu veux savoir comment elle est faite, regarde les sources des lib de gcc.
sinon, pour trouver les fonctions quand tu ne les connait pas, il y a deux solutions :
au pif dans le man (man -k rename, man -k move)
ou sur quelques site
http://www.cppreference.com/
où d'ailleur la fonction rename est lister (dans "All C functions") Salutation !
Char Snipeur

Répondre à Char Snipeur

4

mamiemando, le 25 oct 2006 à 18:52:35

Ah je connaissais pas cette focntion ! Très sympathique et nettement plus propre que ma solution ;)

Répondre à mamiemando

5

neolistic, le 25 oct 2006 à 20:46:08

C'est super!
Merci beaucoup!
Mais je ne suis pas convaincu par le man -k.
Par exemple, je cherchais une fonction pour savoir si un fichier est un répertoire et ben j'ai pas trouvé ni dans man -k ni dans cppreference, au final j'ai trouvé dans le code source de la commande mv: lstat! Si tu crois etre perdu, revient sur tes pas.

Répondre à neolistic

6

mamiemando, le 26 oct 2006 à 00:20:24

man mv
man ls

Mais il y a une fonction en C pour tester si un fichier est un répertoire... Je ne me souviens plus du nom par contre.

Bonne chance

Répondre à mamiemando

7

Char Snipeur, le 26 oct 2006 à 08:48:29

J'ai pas dit que c'était infaillible le "man -k" mais ça peut aider à trouver une fonction quand on sait ce qu'elle fait. (si la fonction existe)
sinon, quand tu ouvre ton flux de fichier, tu as un FILE*
Ceci est une structure. N'y aurait-il pas un des membre de cette struct qui dirait si c'est un fichier ou non? Salutation !
Char Snipeur

Répondre à Char Snipeur

8

 mamiemando, le 26 oct 2006 à 15:22:33

man fstat
man opendir
man readdir
man closedir


Bonne chance

Répondre à mamiemando
Collection CommentÇaMarche.net