Accueil > Forum > > > > Problème renommer des fichiers avec la fonction rename()
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
|
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'
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|