[C] renommer un fichier

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.

8 réponses

  1. Modérateur
    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
    2
    1. 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!
      0
      1. Contributeur
        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
        https://en.cppreference.com/w/
        où d'ailleur la fonction rename est lister (dans "All C functions")
        0
        1. Modérateur
          Ah je connaissais pas cette focntion ! Très sympathique et nettement plus propre que ma solution ;)
          0
          1. 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!
            0
            1. Modérateur
              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
              0
              1. Contributeur
                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?
                0
                1. Modérateur
                  man fstat
                  man opendir
                  man readdir
                  man closedir


                  Bonne chance
                  0

                  Discussions similaires

                  question pix mot caché

                  7 réponses