IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Mofidication de l'arborescence - Deplacement de fichier


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 21
    Points
    21
    Par défaut Mofidication de l'arborescence - Deplacement de fichier
    Bonjour a tous (eh oui c'est mon premier topic)

    Bon j'ai 2 problemes

    _ Je souhaite creer un programme automatisé pour organiser ma bibliothèque de tablatures (je suis guitariste, j'ai téléchargé 650 megas de tablatures, et une tablature fait 4kO.... donc manuellement c'est meme pas la peine d'y penser, j'y ai deja passé un mois, et j'en suis qu'à la lettre A). Donc un fichier se présente sous cette forme la
    ACDC - Thunderstruck.gp3
    nomdelartiste - nomdelamusique. extention [gp3,gp4,gtp]
    Je souhaite organiser pour un classement dans des dossiers A, B, C, puis un dossier par artiste, avec son nom, puis dans ce dossier toutes ses chansons avec seulement le nom de la chanson. L'extention n'a aucune importance pour moi.

    _Je débute en C.... (ce qui est a mon avis le plus gros handicap)..

    En utilitaire de developpement j'utilise devC++, et j'ai comme livre de référence "le language C" chez "le programmeur"
    En système d'exploitation j'ai windows XP (très mauvais je sais, mais j'essaye en meme temps que j'apprend le C de me mettre a LINUX, heuresement que je suis en fac..)

    Voila, tous vos conseils sont les bienvenus, parce que je n'arrive ni a trouver les instructions pour le faire, ni les librairies (enfin i'a pas 10 millions de boulet qui telechargent 600 meg de fichier a 4ko...) Je remercie tous ceux qui répondront, et aussi ceux qui se limiteront a lire.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 142
    Points : 127
    Points
    127
    Par défaut
    Va faire un tour là-dessus
    http://c.developpez.com/faq/c/?page=fichiers
    Ca te permettra de savoir comment lister les fichiers d'un répertoire, déplacer des fichiers, etc...

    Ensuite il te faudra une fonction de tri...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 21
    Points
    21
    Par défaut
    Merci, je vais regarder sa tout de suite...
    Pour la fonction de tri, j'aurais aussi besoin d'un coup de main

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Mofidication de l'arborescence - Deplacement de fichier
    Citation Envoyé par isildur37
    _ Je souhaite creer un programme automatisé pour organiser ma bibliothèque de tablatures (je suis guitariste, j'ai téléchargé 650 megas de tablatures, et une tablature fait 4kO.... donc manuellement c'est meme pas la peine d'y penser, j'y ai deja passé un mois, et j'en suis qu'à la lettre A). Donc un fichier se présente sous cette forme la
    ACDC - Thunderstruck.gp3
    nomdelartiste - nomdelamusique. extention [gp3,gp4,gtp]
    Je souhaite organiser pour un classement dans des dossiers A, B, C, puis un dossier par artiste, avec son nom, puis dans ce dossier toutes ses chansons avec seulement le nom de la chanson. L'extention n'a aucune importance pour moi.
    Si j'ai bien compris, à partir un répertoire où tout est en vrac :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    POLICE - Walking on the moon.gp3
    ACDC - Thunderstruck.gp3
    POLICE - Message in a bottle.gp3
    ALICIA KEYS - whatever.gp3
    Tu souhaites obtenir ça sur ton disque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    A/ACDC/Thunderstruck.gp3
      ALICIA KEYS/whatever.gp3
    P/POLICE/Walking on the moon.gp3
             Message in a bottle.gp3
    _Je débute en C.... (ce qui est a mon avis le plus gros handicap)..
    Je ne suis pas sûr que le C soit le meilleur des outils pour ça, mais comme on est sur le forum C (et que je ne connais pas d'alternative), allons-y.

    Il faut que tu commences par maitriser la gestion des répértoires. Le langage C natif ne sait pas faire, mais heureusement, il y a des fonctions POSIX.1 (donc très portables) comme opendir() readdir() etc. qui permettent de faire ça (supportées par Dev-C++).

    Entraine toi déjà à maitriser ces fonctions et à créer une liste (ecran, fichier, peu importe) à partir de tes fichiers (comme un dir sous DOS, mais juste avec les noms des fichiers).
    En système d'exploitation j'ai windows XP (très mauvais je sais<...>
    HALTE! Que les choses soient claires.

    La plupart des programmeurs C utilisent Windows ou Linux quand ce n'est pas les deux. Ce n'est donc pas le lieu pour déclencher une guerre des OS, qui de toutes façon serait rapidement modérée. (Je rappelle qu'on est sur un forum privé, avec un Dieu qui a tout les droits).

    Il existe des forums poubelles pour ce genre de débats stériles.
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par isildur37
    Merci, je vais regarder sa tout de suite...
    Pour la fonction de tri, j'aurais aussi besoin d'un coup de main
    qsort(), mais une chose à la fois... Fait déjà ta liste...
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 21
    Points
    21
    Par défaut
    Ok. T'as tout bien compris ce que je veux arriver a faire.
    Dsl pour les OS
    Au passage, tu saurais pas comment on laisse ouverte l'invite de commande sous windows xp après éxecution d'un programme. J'arrive pas a trouver comment on modifie sa sur le net, et devoir accéder par les bons vieux moyens (j'ai un pc depuis 1992, alors le DOS je connais un peu), mais bon, c'est pénible.
    Si je compile et que j'éxecute sous devc++, l'invite de commandes s'ouvre, lance le programme, et se referme. Pour pouvoir voir le resultat, il faut que je passe directement en invite de commande, accéder manuellement au dossier (heureusement, j'ai eu la bonne idée de placer "programmes" a la racine du C:\), mais c'est long et lourd.
    Donc si l'invite de commande pouvait encombrer mon écran un peu plus longtemps... Je suis presque sur que c'est qu'une option, mais encore faut-il la trouver...

    Merci a vous deux d'avoir répondu aussi rapidement. Maintenant je me mets sérieusement au boulot

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Euh...
    Il est ici question de répartition dans des dossiers selon le nom du fichier. Je ne crois pas qu'une fonction de tri soit nécessaire...

    Ce qu'il faut par contre, c'est être sûr que tous les fichiers ont bien la même convention de nommage : artiste,séparateur,titre et que le séparateur soit le même pour tous.

    Ensuite, il suffit de séparer artiste et titre dans le nom du fichier, déplacer le fichier dans le bon répertoire (en créant le répertoire s'il n'existe pas déjà) puis renommer le fichier (d'ailleurs, déplacement et renommage peuvent peut-être être faits en même temps...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 142
    Points : 127
    Points
    127
    Par défaut
    En effet tu as raison pas besoin de trier !!

    Il suffit de prendre la première lettre du fichier et de copier le fichier dans un répertoire dont le nom est égal à cette lettre.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 21
    Points
    21
    Par défaut
    Oui, tous respectent cette convention, tout est sur un meme site, et tous sont répartis selon la meme convention, donc y'a juste a trier

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 21
    Points
    21
    Par défaut
    J'ai quelques problemes avec la synthaxe des commandes opendir() readdir() . Pouvez-vous m'expliquer leur fonctionnement, et ce qu'elles entrainent. Voila ce que me donne le lien de tomasha

    Les fonctions opendir, readdir permettent de parcourir un répertoire et sont conformes à la norme POSIX.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <stdio.h>
    #include <sys/types.h>
    #include <dirent.h>
     
     
    main()
    {
        struct dirent *lecture;
        DIR *rep;
        rep = opendir("/tmp");
        while ((lecture = readdir(rep))) {
            printf("FICHIER: %s\n", lecture->d_name);
        }
        closedir(rep);
    }
    Sa me parle hébreux..., surtout les variables qui me disent rien, dès fois on s'en sort avec, mais la, vu que je débute, j'y comprend rien

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par isildur37
    J'ai quelques problemes avec la synthaxe des commandes opendir() readdir() <...> j'y comprend rien
    "J'y comprend rien" n'est pas une attitude acceptable pour avancer. Quand on te présente un fonction inconnue, la moindre des choses est d'aller voir la doc. (help, F1, man readdir, google man readdir etc.)

    Voici néanmoins une version plus 'canonique' et surtout commentée...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    #include <stdio.h>
    #include <sys/types.h>
    #include <dirent.h>
     
    int main (void)
    {
       /* ouvrir le repertoire indique (ici, la racine) */
       DIR *rep = opendir ("/");
     
       /* si ce repertoire existe */
       if (rep != NULL)
       {
          struct dirent *lecture;
     
          /* lire chaque entree jusqu'a ce que readdir()
             retourne NULL (fin du repertoire)
             
             Les informations sur chaque entre'e
             (moi-meme, precedent, repertoire, fichiers)
             sont stockees dans une structure 'dirent'
             (DIRectory ENTry).
             
             */
          while ((lecture = readdir (rep)) != NULL)
          {
             /* on affiche le nom de l'entree */
             printf ("'%s'\n", lecture->d_name);
          }
     
          /* fin de lecture : fermeture du repertoire. */
          closedir (rep), rep = NULL;
       }
     
       return 0;
    }
    Pas de Wi-Fi à la maison : CPL

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 21
    Points
    21
    Par défaut
    Merci c'est 100 fois plus clair que ce que j'avais trouvé. Avec sa je devrais pouvoir arriver a avancer encore. Un grand merci a vous tous. Dès que c'est pret je met le Code source sur la page pour que vous me disiez ce que vous en pensez (c'est avec les critiques qu'on avance).

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par isildur37
    Dès que c'est pret je met le Code source sur la page pour que vous me disiez ce que vous en pensez (c'est avec les critiques qu'on avance).
    Ok, je préfère çà...
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 21
    Points
    21
    Par défaut
    C'est normal, je me fais aider, donc les gens qui m'ont aidé voient les résultats de leur enseignement, et puis, si d'autres en ont besoin un jour de ce genre de programme.... et bah ils en auront un sous la main, commenté et fiable.

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 46
    Points : 21
    Points
    21
    Par défaut
    Voila la version alpha, en n'utilisant que les renseignements fournis par le livre que j'utilise et par vous-meme.


    #include <stdio.h>
    #include <sys/types.h>
    #include <dirent.h>



    /*Ouverture et listage du contenu du répertoire*/
    int main(void)
    {

    DIR *rep = opendir("/");

    if(rep !=NULL)
    {
    struct dirent *lecture;

    while ((lecture = readdir(rep)) !=NULL)
    {
    printf( "'%s\n" , lecture->d_name);
    }
    }


    /* Modification du nom du fichier en mode manuel*/
    void main()
    {
    char oldname[80], newname[80];

    printf( "Nom du fichier actuel : " );
    gets(oldname);
    printf( "Nouveau nom du fichier" );
    gets(newname);

    if(!(rename(oldname, newname) ==0))
    fprint(stderr, "Erreur survenue pendant le changement de nom de %s.n\", oldname);
    return 0;
    }


    /*Fin du changement de nom*/

    /*Fermeture du repertoire*/

    closedir (rep), rep=NULL;
    }
    return 0;
    }

    /*Copie des fichiers vers un dossier défini par l'utilisateur*/

    int file_copy(char *oldname, char *newname);

    void main()
    {
    char source[80], destination[80];

    /*Demande les noms des fichiers source et de destination*/

    printf("nIndiquer le nom du fichier source : ");
    gets(source);
    printf("nIndiquer le nom du fichier de destination : ");
    gets(destination);

    if (!(file_copy(source, destination) ==0))
    fprintf (stderr, "Erreur au cours de la copie du fichier %s.n\", oldname);

    return 0;
    }

    int file_copy(char *oldname, char *newname°
    {
    FILE *fold, *fnew;
    int c;

    /*Ouverture du fichier source en lecture, mode binaire.*/

    if((fold = fopen(oldname, "rb")) == NULL)
    return -1;

    /*Ouverture du fichier destination en écriture, mode binaire.*/

    if((fnew = fopen(newname, "wb")) ==NULL
    {
    fclose (fold);
    return -1;
    }

    /*lire le fichier source octet par octet. Si on n'a pas atteint la fin
    du fichier, écrire l'octet sur le fichier destination*/


    while (1)
    {
    c=fgetc(fold);

    if(feof(fold))
    fputc(c, fnew);
    else
    break;
    }
    fclose (fnew);
    fclose (fold);

    return 0;

    closedir(rep);

    }

    Bon voila tout sa c'est bien beau, mais sa revient a rester devant son pc... Alors ce que je souhaite, c'est automatiser cela, pour que:
    ACDC - Thunderstruck.gp3

    devienne
    A/ACDC/Thunderstruck.gp3

    Donc je pense qu'il faut définir des variables et faire une grande boucle, qui les initialise a chaque fois qu'elle recommence. Qu'en dites vous?

    En ce qui concerne le nom des répertoires, il faudrait, je pense, un autre variable qui lirait la premiere lettre du nom du fichier et qui "orienterait" le fichier vers un répertoire, ensuite une seconde qui lirait jusqu'à la séparation, qui comprarerait avec les répertoires existants et qui, soit s'il existe deja, copierait le fichier dans ce répertoire, soit créérait un répertoire avec la premiere partie du nom du fichier comme nom du répertoire.

    PS: il est hautement probable que ce code source ne marche pas, étant donné que j'ai repris divers éléments que je ne comprend pas forcément bien.

  16. #16
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par isildur37
    Voila la version alpha, en n'utilisant que les renseignements fournis par le livre que j'utilise et par vous-meme.
    #include <stdio.h>
    #include <sys/types.h>
    #include <dirent.h>
    Il ne faut pas t'amuser à passer des heures à mettre de la couleur dans le code source... Contente toi de mettre les balises codes...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include <stdio.h>
    #include <sys/types.h>
    #include <dirent.h>
    Pas de Wi-Fi à la maison : CPL

  17. #17
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Je ne veux pas te dissuader d'apprendre le C mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    #! /usr/bin/perl
    use strict; use warnings;
     
    my $rootdir = $ARGV[0];
    #rajoute un "/" à la fin du nom de répertoire s'il n'y en a pas
    $rootdir =~ s{(?<!/)(?<!\\)$}{/};
    opendir( ROOT, $rootdir ) or die "Can't open $rootdir : $!\n";
     
    #crée les répertoires A/ à Z/
    foreach( 'A'..'Z'){
      mkdir( $rootdir.$_ ) or die "Can't create $rootdir/$_ : $!\n";
    }
     
    while( my $tab = readdir( ROOT ) ){
      #essaie de découper le nom de fichier
      if( my ($artist, $ini, $song) = ($tab =~ m/^((.).*?) - (.+)$/) ){
        my $finaldir = $rootdir.$ini.'/'.$artist.'/';
        mkdir( $finaldir ) if( not -e $finaldir ) or die "Can't create $finaldir : $!\n";
        rename( $rootdir.$tab , $finaldir.$song ) or die "Can't rename $tab : $!\n";
        print "Renomme ". $rootdir.$tab ." en ". $finaldir.$song ." .\n";
      }
    }
    Ce code Perl fait ce que tu demandes, il te suffira de télécharger Perl si tu ne l'as pas déjà (ActivePerl si tu es sous Windows, sinon tu l'as surement déjà) et de l'exécuter en lui passant le répertoire où se trouvent tes tablatures en paramètre.

    ("C" est très inadapté à l'admin système, qui a besoin de petit script vite fait mal fait et non-réutilisable... note bien que le code ci-dessus ne respecte pas vraiment ces critères, un vrai perliste aurait fait un uniligne ! Seul les gros logiciels d'admin sont écris en C, et ils ne demandent pas de connaître le C pour pouvoir les utiliser)

    --
    Jedaï

  18. #18
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    [ne fait pas avancer le schmilblick]
    C'est toi qui a colorié les mots clé de ton programme? (le gras pour les if, while, le vert pour les include...)
    Si oui ben tu a du courage.
    Sinon il existe la balise code (elle ne met pas en couleur mais garde l'indentation du code
    [/ne fait pas avancer le schmilblick]
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  19. #19
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par isildur37
    Alors ce que je souhaite, c'est automatiser cela, pour que:
    ACDC - Thunderstruck.gp3

    devienne
    A/ACDC/Thunderstruck.gp3
    Dans la boucle de lecture du répertoire, il faut faire le traitement qui va bien, à savoir

    Récupérer le nom du fichier
    Analyser ce nom pour en faire
    <premiere lettre>/<artiste>/<chanson>
    C'est pas très dur. Essaye déjà sur une chaine simple (en dehors de la lecture du répertoire qui est un autre problèlme).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char const oldfic[] = "ACDC - Thunderstruck.gp3 ";
    Il suffit de créer une chaine de destination (de la bonne taille ou carrément grande la première au début si tu ne maitrises pas l'allocation dynamique.)

    char newfic[256];

    ensuite, il faut copier dans newfic des caractères extraits de oldfic. Il faut parcourir la chaine et mettre en oeuvre un petit algorithme qui va analyser les caractères un par un en séquence et les ranger comme il faut dans newfic, jusqu'à obtenir une chaine valide (rappel, une chaine est un tableau de char terminé par un 0).

    C'est la partie un peu délicate de ton programme.

    Ensuite, un coup de 'rename()' et le tour est joué. (Quouque raname() quand le répertoire est ouvert, ça va peut être pas le faire... On verra bien. Sinon, on fera autrement.
    Pas de Wi-Fi à la maison : CPL

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 142
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par Jedai
    Je ne veux pas te dissuader d'apprendre le C mais :
    (...)
    ("C" est très inadapté à l'admin système, qui a besoin de petit script vite fait mal fait et non-réutilisable... note bien que le code ci-dessus ne respecte pas vraiment ces critères, un vrai perliste aurait fait un uniligne ! Seul les gros logiciels d'admin sont écris en C, et ils ne demandent pas de connaître le C pour pouvoir les utiliser)

    --
    Jedaï
    Entièrement d'accord avec Jedaï, un script Perl est bien plus adapté à ce genre de traitement et de même beaucoup plus réutilisable et maintenable.

Discussions similaires

  1. Arborescence d'un fichier XML
    Par lysandra dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 21/08/2006, 15h08
  2. Problème de droits : impossible de déplacer un fichier
    Par sderecourt dans le forum Administration système
    Réponses: 2
    Dernier message: 20/04/2006, 10h56
  3. [VBA-A]Parcours d'une arborescence dossiers et fichiers
    Par sidneyvba dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/03/2006, 16h58
  4. Outil de comparaison d'arborescence et de fichiers
    Par elitost dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 08/11/2005, 11h36
  5. deplacer un fichier
    Par fraizas dans le forum Langage
    Réponses: 4
    Dernier message: 12/10/2005, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo