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 :

Fonction rename qui renomme pas toujours


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut Fonction rename qui renomme pas toujours
    Bonjour,

    J'essaye de renommer des fichiers mais parfois cela ne marche pas alors je ne comprends pas bien pourquoi.

    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
     
    void check_file_name(char *path, char *current_path, struct dirent *entity)
    {
        if ( 4<=entity->d_namlen && entity->d_namlen<8 )
        {
            char id[5]="XXXX";
            char name[9]="0001XXXX";
     
            int i;
            for (i=entity->d_namlen-4 ; i<entity->d_namlen ; i++)
                id[i-entity->d_namlen+4]=entity->d_name[i];
     
            for (i=4 ; i<8 ; i++)
                name[i]=id[i-4];
     
            int result=rename(current_path, get_current_path( path, name));
     
            FILE *log = NULL;
     
            if ( (log = fopen("log.txt","a+")) != NULL  )
                fprintf(log,"\n--rename %s in %s | %d", current_path, get_current_path( path, name), result);
     
            else fprintf(stderr,"\n --erreur ouverture fichier log.txt");
     
            fclose(log);
        }
    }
    J'ai un log qui donne ca :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
     
    --rename C:\Documents and Settings\alv\Bureau\programmes\103\0019982 in C:\Documents and Settings\alv\Bureau\programmes\103\00019982 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\103\O009853 in C:\Documents and Settings\alv\Bureau\programmes\103\00019853 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\103\O009960 in C:\Documents and Settings\alv\Bureau\programmes\103\00019960 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\103\O9960 in C:\Documents and Settings\alv\Bureau\programmes\103\00019960 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\106\1026 in C:\Documents and Settings\alv\Bureau\programmes\106\00011026 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\106\1045 in C:\Documents and Settings\alv\Bureau\programmes\106\00011045 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\106\1100 in C:\Documents and Settings\alv\Bureau\programmes\106\00011100 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\106\1114 in C:\Documents and Settings\alv\Bureau\programmes\106\00011114 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\106\1137 in C:\Documents and Settings\alv\Bureau\programmes\106\00011137 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\106\1163 in C:\Documents and Settings\alv\Bureau\programmes\106\00011163 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\106\1175 in C:\Documents and Settings\alv\Bureau\programmes\106\00011175 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\106\O1014 in C:\Documents and Settings\alv\Bureau\programmes\106\00011014 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\204113 in C:\Documents and Settings\alv\Bureau\programmes\107\00014113 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\244113 in C:\Documents and Settings\alv\Bureau\programmes\107\00014113 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\244235 in C:\Documents and Settings\alv\Bureau\programmes\107\00014235 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\244276 in C:\Documents and Settings\alv\Bureau\programmes\107\00014276 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\284272 in C:\Documents and Settings\alv\Bureau\programmes\107\00014272 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\284387 in C:\Documents and Settings\alv\Bureau\programmes\107\00014387 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\284443 in C:\Documents and Settings\alv\Bureau\programmes\107\00014443 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\284773 in C:\Documents and Settings\alv\Bureau\programmes\107\00014773 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\286203 in C:\Documents and Settings\alv\Bureau\programmes\107\00016203 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\288001 in C:\Documents and Settings\alv\Bureau\programmes\107\00018001 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\324386 in C:\Documents and Settings\alv\Bureau\programmes\107\00014386 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\324442 in C:\Documents and Settings\alv\Bureau\programmes\107\00014442 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\328002 in C:\Documents and Settings\alv\Bureau\programmes\107\00018002 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\328007 in C:\Documents and Settings\alv\Bureau\programmes\107\00018007 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\328008 in C:\Documents and Settings\alv\Bureau\programmes\107\00018008 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\384383 in C:\Documents and Settings\alv\Bureau\programmes\107\00014383 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\384385 in C:\Documents and Settings\alv\Bureau\programmes\107\00014385 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\384386 in C:\Documents and Settings\alv\Bureau\programmes\107\00014386 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\384387 in C:\Documents and Settings\alv\Bureau\programmes\107\00014387 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\388001 in C:\Documents and Settings\alv\Bureau\programmes\107\00018001 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\444383 in C:\Documents and Settings\alv\Bureau\programmes\107\00014383 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\444384 in C:\Documents and Settings\alv\Bureau\programmes\107\00014384 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\448001 in C:\Documents and Settings\alv\Bureau\programmes\107\00018001 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\60341 in C:\Documents and Settings\alv\Bureau\programmes\107\00010341 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\107\68485 in C:\Documents and Settings\alv\Bureau\programmes\107\00018485 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\108\1006 in C:\Documents and Settings\alv\Bureau\programmes\108\00011006 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\108\1027 in C:\Documents and Settings\alv\Bureau\programmes\108\00011027 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\108\1187 in C:\Documents and Settings\alv\Bureau\programmes\108\00011187 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\108\1233 in C:\Documents and Settings\alv\Bureau\programmes\108\00011233 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\108\1276 in C:\Documents and Settings\alv\Bureau\programmes\108\00011276 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\109\01113 in C:\Documents and Settings\alv\Bureau\programmes\109\00011113 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\109\1028 in C:\Documents and Settings\alv\Bureau\programmes\109\00011028 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\109\1232 in C:\Documents and Settings\alv\Bureau\programmes\109\00011232 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\110\06546 in C:\Documents and Settings\alv\Bureau\programmes\110\00016546 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\110\06558 in C:\Documents and Settings\alv\Bureau\programmes\110\00016558 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\110\6400 in C:\Documents and Settings\alv\Bureau\programmes\110\00016400 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\110\6496 in C:\Documents and Settings\alv\Bureau\programmes\110\00016496 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\110\6499 in C:\Documents and Settings\alv\Bureau\programmes\110\00016499 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\110\6503 in C:\Documents and Settings\alv\Bureau\programmes\110\00016503 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\110\6504 in C:\Documents and Settings\alv\Bureau\programmes\110\00016504 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\110\6505 in C:\Documents and Settings\alv\Bureau\programmes\110\00016505 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\110\6506 in C:\Documents and Settings\alv\Bureau\programmes\110\00016506 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\110\6507 in C:\Documents and Settings\alv\Bureau\programmes\110\00016507 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\110\O6549 in C:\Documents and Settings\alv\Bureau\programmes\110\00016549 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\110\O6589 in C:\Documents and Settings\alv\Bureau\programmes\110\00016589 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\122\O1108 in C:\Documents and Settings\alv\Bureau\programmes\122\00011108 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\122\O1109 in C:\Documents and Settings\alv\Bureau\programmes\122\00011109 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\122\O3001 in C:\Documents and Settings\alv\Bureau\programmes\122\00013001 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\122\O3005 in C:\Documents and Settings\alv\Bureau\programmes\122\00013005 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\129\Archive 02-10-2012\0001 in C:\Documents and Settings\alv\Bureau\programmes\129\Archive 02-10-2012\00010001 | -1
    --rename C:\Documents and Settings\alv\Bureau\programmes\retour\0000 in C:\Documents and Settings\alv\Bureau\programmes\retour\00010000 | -1
    On voit les -1 du retour de la fonction rename qui montre que les fichiers n'ont pas été renommés. J'ai pourtant tous les droits. Auriez-vous une explication à cet étrange phénomène paranormal?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Les 3 premiers fonctionnent, et aucun des suivant.

    Pourquoi est-ce que tu utilises namelen -4 ? Pour l'extension que tu n'as pas ? Je pense que tu devrais commenter ton code, je pense qu'il y a des erreurs dedans.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    En fait les noms de programmes doivent être de la forme 0001XXXX. Malheuresement cela n'a pas été respecté et c'est le gros bordel.

    Donc 0001 invariant et XXXX le numéro de programme que j'ai appelé ID.

    Pour les fichiers qui font entre 4 et 7 caractères
    4 pour les 4 chiffres d'ID
    et 7 caractères max car si 8 le numéro de programme est déjà bon.

    Je récupère dans ID le numéro de programme, je le concatène à 0001, je l'ajoute au path pour avoir le chemin absolu et je demande de renommer.

    Mon log fait 180ko pour 9ko d'erreur. Ce qui donne environ 4% des fichiers qui ne sont pas renommés.

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Tu as un besoin spécifique, qui me semble pouvoir être couvert par le programme linux "rename". Tu dois pouvoir en trouver une variante pour windows

  5. #5
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    J'utilise dirent.h qui si j'ai bien compris viens d'abord d'Unix et a été arrangé pour windows. J'utilise donc déjà la fonction rename en question si c'est bien de ça dont tu parlais.
    J'hésite à utiliser "ren" par system mais je préférai éviter et plutôt comprendre l'origine de ces erreurs.

  6. #6
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Citation Envoyé par leternel Voir le message
    Tu as un besoin spécifique, qui me semble pouvoir être couvert par le programme linux "rename". Tu dois pouvoir en trouver une variante pour windows
    Il ne s'agit pas du programme linux rename, mais de la fonction C rename, qui est (sauf erreur) C89, donc implementee par la tres grande majorite des compilateurs sous quel qu'OS que ce soit.



    Sinon, si j'ai bien compris, tu veux :
    Si 4 <= longueur < 8
    recuperer les 4 derniers caracteres du nom de fichier
    renommer le fichier en 0001XXXX avec XXXX les 4 char

    Et pourquoi pas un simple memcpy ? Un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      memcpy (tmp_name, entity->d_name[entity->d_namlen -4], 4);
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  7. #7
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    Ah oui oui oui, j'achète. Je ne connais pas toutes ces fonctions par cœur, malheureusement =D. Surtout que je mettrais au moins autant de temps sinon plus à chercher le nom de la fonction que de la refaire (en moins bien).

    Merci pour ça.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. fonction intval ne fonctionne pas toujours ?
    Par ninikkhuet dans le forum Langage
    Réponses: 2
    Dernier message: 24/12/2009, 10h23
  2. fonction javascript qui marche pas
    Par iam dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/02/2008, 14h46
  3. [Mail] fonction mail qui fonctionne pas
    Par digger dans le forum Langage
    Réponses: 3
    Dernier message: 31/08/2006, 22h28
  4. fonction ridicule qui fonctionne pas sous firefox
    Par Isses dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 27/06/2006, 12h08
  5. fonction plpgsql qui fonctionne pas...
    Par Empty_body dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 15/01/2006, 18h22

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