begin process at 2012 05 29 21:51:35
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

Problème renommer des fichiers avec la fonction rename()


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème renommer des fichiers avec la fonction rename()

samedi 19 novembre 2011 à 12:23:53 | Problème renommer des fichiers avec la fonction rename()

kepon72

Bonjour,
Voila j'ai coder un petit programme en C qui me permet de renommer des fichiers .avi présent dans un répertoire de la même façon le Titre est recuperer depuis un fichier texte et le mon problème c'est que les fichiers ne sont pas renommer or la chaine de l'ancien nom est correct et celle du nouveau aussi...
Voici mon code:
Code C/C++ :
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <windows.h>
#include <string.h>

#define MAX_CHAR   85

void lecture_dir(const char* dir)
{
    struct dirent *lecture;
    DIR *rep;   
    FILE *fichier;
    rep=opendir(dir);   
    fichier=fopen("Titres.txt", "r");
    int i=0; int c=0;
    long len_name, len_dir, len_sl, len, len1, len_title=0;
    char D='-'; char chaine[MAX_CHAR];
    char* buffer;
    char* buffer1;
    char* pTitle[500];
    const char* Slash="\\";
    
    /////////////////////////////////*************** Ouverture fichier Titres.txt **************///////////////////////////////////////
    while(fgets(chaine, MAX_CHAR, fichier) != NULL)
    {
         len_title=strlen(chaine);
         pTitle[c]=(char *)calloc(len_title+1, sizeof(char));
         strcpy(pTitle[c], chaine); 
         printf("Num: %d Titre: %s", c, pTitle[c]);
         c++;
    }
    fclose(fichier);
    printf("\n");
    /////////////////////////////////********************* Ouverture repertoire *****************///////////////////////////////////////  
    while(lecture=readdir(rep))
    {
         if(strcmp(lecture->d_name, ".")!=0)
         if(strcmp(lecture->d_name, "..")!=0)
         if(strcmp(lecture->d_name, "desktop.ini")!=0)
         if(strcmp(lecture->d_name, "Desktop.ini")!=0)
         {
                    len_name=strlen(lecture->d_name);
                    len_dir=strlen(dir);
                    len_sl=strlen(Slash);
                    len=len_name+len_dir+len_sl;
                    len1=len_title+len_dir+len_sl;
                    
                    buffer=(char *)calloc(len+1, sizeof(char));
                    buffer1=(char *)calloc(len1+1, sizeof(char));
                    
                    strcat(buffer, dir);
                    strcat(buffer, Slash);
                    strcat(buffer, lecture->d_name); //De la forme "test\\Old_Nom_fichier.avi" 
                    
                    strcat(buffer1, buffer);
                    
                    for(int j=0;j<=len1;j++)
                    {
                         if((buffer1[j])==D)
                         {
                             strcpy(buffer1+j+1, pTitle[i]); //De la forme "test\\01.02 - New_Nom_fichier.avi" 
                             printf("%s\n", buffer1);
                             if(rename(buffer, buffer1)==0)
                             {
                                 printf(" %s Ok\n", buffer1);
                             }
                         }
                    }
         i++;
         }
    }
    closedir(rep);
}

int main(void)
{
    int c;
    char* choix;
    
    choix=(char *)calloc(20+1, sizeof(char));
    scanf("%d", &c);
    switch(c)
    {
        case 1:
            strcpy(choix, "Saison 1");
            lecture_dir(choix);
            getchar();
            break;
        case 2:
            strcpy(choix, "Saison 2");     
            lecture_dir(choix); 
            getchar();    
            break;
        case 3:
            strcpy(choix, "Saison 3"); 
            lecture_dir(choix);
            getchar();
            break;
        case 4:
            strcpy(choix, "Saison 4"); 
            lecture_dir(choix);
            getchar();
            break;
        case 5:
            strcpy(choix, "Saison 5"); 
            lecture_dir(choix);
            getchar();
            break;
        case 6:
            strcpy(choix, "Saison 6"); 
            lecture_dir(choix);
            getchar();
            break;
        case 7:
            strcpy(choix, "Saison 7"); 
            lecture_dir(choix);
            getchar();
            break;
        case 8:
            strcpy(choix, "Saison 8"); 
            lecture_dir(choix);
            getchar();
            break;
        case 9:
            strcpy(choix, "Saison 9"); 
            lecture_dir(choix);
            getchar();
            break;
        case 10:
            strcpy(choix, "Saison 10"); 
            lecture_dir(choix);
            getchar();
            break;
        default:
            strcpy(choix, "test");
            lecture_dir(choix);
            getchar();
            break;
    }
    return 0;
}

et voici le fichier Titres.txt:
Code :
 Illuminatti.avi
 La relève.avi
 Monsieur Ed.avi
 Partenaires.avi
 Super héros.avi
 Un meurtrier parmi nous.avi
 Retour vers le futur.avi
 Gormogon.avi
 La magie de Noël.avi
 À toute vitesse.avi
 L'ésprit d'équipe.avi
 Lorsque l'enfant paraît….avi
 La Raison et le c½ur.avi
 Mélodie pour un meurtre.avi
 L’Apprenti.avi
dimanche 20 novembre 2011 à 10:24:58 | Re : Problème renommer des fichiers avec la fonction rename()

kepon72

Avec GetLastError(); j'ai une erreur 125 de renvoyer.
Quelqu'un a t-il une idée ?
dimanche 20 novembre 2011 à 17:49:17 | Re : Problème renommer des fichiers avec la fonction rename()

mogwai93

regarde ici

c'est la liste des erreurs retournées par getlasterror
dimanche 20 novembre 2011 à 18:23:26 | Re : Problème renommer des fichiers avec la fonction rename()

rt15

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Salut,

A vue de nez, au moins un problème, len_title est affecté dans la première boucle successivement pour chaque titre, puis elle est utilisée dans la deuxième boucle où elle ne peut valoir que la longueur du dernier titre contenu dans le fichier.

Attention au saut de ligne quand on récupère les lignes avec fgets.

Les lenXXX dans tout les sens ne facilitent pas la compréhension...
Pour trouver un caractère, utiliser strchr est souvent plus simple que de boucler sur la chaîne.

Code C/C++ :
#include <stdio.h>
#include <dirent.h>
#include <string.h>

#define MAX_CHAR  128

FILE* safeOpenFile(char* lpPath, char* lpMode, FILE** lpFile)
{
  *lpFile = fopen(lpPath, lpMode);
  if (!*lpFile)
  {
    printf("Cannot open file \"%s\"", lpPath);
  }
  return *lpFile;
}

DIR* safeOpenDir(char* lpPath, DIR** lpDir)
{
  *lpDir = opendir(lpPath);
  if (!*lpDir)
  {
    printf("Cannot open directory \"%s\"", lpPath);
  }
  return *lpDir;
}

void update_dir(char* lpPath)
{
  FILE* lpFile;
  DIR* lpDir;
  int nTitlesCount;
  char lpNewTitles[500][MAX_CHAR];
  char* lpLineFeed;
  int nTitleIndex;
  struct dirent* lpDirectoryEntry;
  char lpOldFileName[MAX_CHAR];
  char lpNewFileName[MAX_CHAR];
  char* lpDash;
  char lpOldFilePath[MAX_CHAR];
  char lpNewFilePath[MAX_CHAR];

  if (safeOpenFile("Titres.txt", "r", &lpFile))
  {
    /* List all titles in Titres.txt */
    nTitlesCount = 0;
    while(fgets(lpNewTitles[nTitlesCount], MAX_CHAR, lpFile) != NULL)
    {
      /* Remove line feed if necessary */
      lpLineFeed = strchr(lpNewTitles[nTitlesCount], '\n');
      if (lpLineFeed)
        lpLineFeed[0] =0;
      printf("New title name: \"%s\", index: %d\n", lpNewTitles[nTitlesCount], nTitlesCount);
      nTitlesCount++;
    }

    if (safeOpenDir(lpPath, &lpDir))
    {
      for (nTitleIndex = 0; nTitleIndex < nTitlesCount; nTitleIndex++)
      {
        while ((lpDirectoryEntry = readdir(lpDir)))
        {
          if (strcmp(lpDirectoryEntry->d_name, "."))
            if (strcmp(lpDirectoryEntry->d_name, ".."))
              if (strcmp(lpDirectoryEntry->d_name, "desktop.ini"))
                if (strcmp(lpDirectoryEntry->d_name, "Desktop.ini"))
                  break;
        }
        if (!lpDirectoryEntry)
        {
          printf("No more files found in %s\n", lpPath);
          break;
        }
        strcpy(lpOldFileName, lpDirectoryEntry->d_name);
        strcpy(lpNewFileName, lpOldFileName);
        lpDash = strchr(lpNewFileName, '-');
        if (!lpDash)
        {
          printf("Cannot find dash in \"%s\"\n", lpNewFileName);
          break;
        }
        lpDash[1] = 0; /* Truncate after the dash */
        strcat(lpNewFileName, lpNewTitles[nTitleIndex]);
        sprintf(lpOldFilePath, "%s\\%s", lpPath, lpOldFileName);
        sprintf(lpNewFilePath, "%s\\%s", lpPath, lpNewFileName);
        printf("Old file name: \"%s\"\n", lpOldFilePath);
        printf("New file name: \"%s\"\n", lpNewFilePath);
        if (rename(lpOldFilePath, lpNewFilePath))
        {
          puts("Renaming failed");
          break;
        }
      }
      closedir(lpDir);
    }
    fclose(lpFile);
  }
}

int main(void)
{
  int nSeason;
  char lpSeason[128];

  scanf("%d", &nSeason);
  if ((nSeason >= 1) && (nSeason <= 10))
  {
      sprintf(lpSeason, "Saison %d", nSeason);
      update_dir(lpSeason);
  }
  else
  {
    update_dir("test");
  }
  return 0;
}
dimanche 20 novembre 2011 à 18:58:39 | Re : Problème renommer des fichiers avec la fonction rename()

kepon72

Merci beaucoup ! J'ai galérer pendant un moment...


Cette discussion est classée dans : lecture, choix, char, avi, dir


Répondre à ce message

Sujets en rapport avec ce message

Lecture dans un fichier ... CHaud !! [ par ilyatout ] Bonjour,VOilà g un gros problème, c'est idiot mais je n'y arrive pas.j'ai un fichier de la sorte :NOM : NICOLAS / MARTIN // 28je dois stocker NICOLAS Lecture de fichier binaire structuré [ par nico20000 ] Bonjour,j'ai besoin de lire dans un fichier binaire dont l'entête ressemble à ceci: (traduite en hexa)Properties gc90063 num FTPLocal le 17/11/2003Je Lecture fichier [ par AlexMAN ] Bonjour, Je me pose pas mal de questions a propos de la lecture de fichier utilisant les API : -Dois je lire l'integralité d'un fichier en allouant a problème de lecture en c++ sous vc++6 [ par os22 ] j'essaie de lire un fichier ayant le contenu suivantmarc;collin;4506777228;906 boule;longueuil;j4j1t5;qc;14;allo;roger;dumais;5413432128;1150 dumahel; Lecture d'un fichier .avi [ par seb2086 ] Bonjour,je voudrait savoir comment faire ,dans une application MFC,pour lancer la lecture d'une vidéo au format AVI lorsque je clique sur un bouton. ( lecture d'un fichier avi en cliquant sur un bouton de dialogue box [ par brrouabdellah ] je cherche également comme un Monsieur à écrire un simple fichier en c++ avec un dialogue box avec des boutons pour la lecture d'une fichier vidé avi. Listing repertoire recrusif [ par firemax ] Bonjour Mon but est d'ecrire un programme de listing qui list aussi les repertoire , les sous repertoire , les sous sous repertoire et ainsi de suit lecture + conversion char->double [ par obby ] Bonjour,   Je suis un peu embéter car je ne vois pas trop comment faire pour exposé mon petit souci. Je vais essayer d'être le plus clair possible. lecture d'une vidéo AVI dans une appli MFC [ par seb2086 ] Bonjour à tous,Je voudrait pouvoir lancer automatiquement la lecture d'une vidéo à l'aide du contrôle Activex Windows MEDIA PLAYER lorsque la fenêtre sortie de programme impossible [ par maniolar ] Bonjour à tous, celafait deux jours que je tente deseperemment de trouver un moyen de sortir de mon prog correctement mais je n'y arrive pas!! j'ai l'


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales