kepon72
Messages postés25Date d'inscriptionjeudi 23 avril 2009StatutMembreDernière intervention27 novembre 2011
-
19 nov. 2011 à 12:23
kepon72
Messages postés25Date d'inscriptionjeudi 23 avril 2009StatutMembreDernière intervention27 novembre 2011
-
20 nov. 2011 à 18:58
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:
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
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 20 nov. 2011 à 18:23
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.
#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;
}