C言語 dirを使ってファイルを求め、その名前を変更する
Posted: 2016年4月12日(火) 18:13
はじめまして。過去の同様な質問があるかもしれませんが、その時はご容赦ください。
1000を超えるMP3ファイルが、file_mp3 というフォルダに入っています。
dirを使って、そのファイル名をすべて取得して構造体KOZOにいれます。
KOZOのメンバーはファイル名(fname)と通し番号(index)だけです。
typedef struct{
int index;/*ファイルの通し番号*/
char fname[200]; /*ファイルの名前*/
} KOZO;
すべてのファイル名をKOZOに取得し、indexは乱数にて重複しない通し番号を設定できました。
(ファイルをシャッフルしたいのです)。
さて、ここからが問題で、dirを使いfile_mp3フォルダを検索し、KOZO.fname と一致しているものを捜し
KOZO.index "_" を接頭語にして元のファイル名を変更し、別のフォルダ(new_mp3)に移動させたいのですが
以下のコードでは、1つのファイルしか移動できません。(つまり、rename関数が正常終了するのが、file_mp3の先頭にある1個のファイルだけで
残りのファイルは正常終了できません。)
if((dir=opendir(file_mp3))!=NULL){
for(dp=readdir(dir);dp!=NULL;dp=readdir(dir)){
for(i=0;i<fcount;i++){ /* KOZOは全部で fcount ある */
if(strstr(dp->d_name,file.fname)!=NULL){ /* file_mp3 内ファイルとKOZO.fnameが部分一致しているものをさがす */
for(j=0;j<sizeof(cbuf)/sizeof(char);j++) cbuf[j]='\0';
sprintf(cbuf,"%d_%s",file.index,file.fname); /* index_を接頭語にして新しいファイル名(cbuf)をつくる */
if(rename(strcat(file_mp3,dp->d_name),strcat(new_mp3,cbuf))==0){
printf("%s コピー完了\n",cbuf);
break; /*for(i=0;i<fcount;i++) を抜ける*/
}
}
}
}
closedir(dir);
} /* if((dir=opendir(file_mp3))!=NULL) */
else{"指定したフォルダが開けません3\n";exit(1);}
dirで検索中に、検索対象のフォルダ内のファイルに何らかの操作を加えることができないのかとも思いましたが、1個はできているので
そのあたりも不明です。
よろしくご教授ください。
1000を超えるMP3ファイルが、file_mp3 というフォルダに入っています。
dirを使って、そのファイル名をすべて取得して構造体KOZOにいれます。
KOZOのメンバーはファイル名(fname)と通し番号(index)だけです。
typedef struct{
int index;/*ファイルの通し番号*/
char fname[200]; /*ファイルの名前*/
} KOZO;
すべてのファイル名をKOZOに取得し、indexは乱数にて重複しない通し番号を設定できました。
(ファイルをシャッフルしたいのです)。
さて、ここからが問題で、dirを使いfile_mp3フォルダを検索し、KOZO.fname と一致しているものを捜し
KOZO.index "_" を接頭語にして元のファイル名を変更し、別のフォルダ(new_mp3)に移動させたいのですが
以下のコードでは、1つのファイルしか移動できません。(つまり、rename関数が正常終了するのが、file_mp3の先頭にある1個のファイルだけで
残りのファイルは正常終了できません。)
if((dir=opendir(file_mp3))!=NULL){
for(dp=readdir(dir);dp!=NULL;dp=readdir(dir)){
for(i=0;i<fcount;i++){ /* KOZOは全部で fcount ある */
if(strstr(dp->d_name,file.fname)!=NULL){ /* file_mp3 内ファイルとKOZO.fnameが部分一致しているものをさがす */
for(j=0;j<sizeof(cbuf)/sizeof(char);j++) cbuf[j]='\0';
sprintf(cbuf,"%d_%s",file.index,file.fname); /* index_を接頭語にして新しいファイル名(cbuf)をつくる */
if(rename(strcat(file_mp3,dp->d_name),strcat(new_mp3,cbuf))==0){
printf("%s コピー完了\n",cbuf);
break; /*for(i=0;i<fcount;i++) を抜ける*/
}
}
}
}
closedir(dir);
} /* if((dir=opendir(file_mp3))!=NULL) */
else{"指定したフォルダが開けません3\n";exit(1);}
dirで検索中に、検索対象のフォルダ内のファイルに何らかの操作を加えることができないのかとも思いましたが、1個はできているので
そのあたりも不明です。
よろしくご教授ください。