디렉토리의 파일 이름을 바꾸고 싶습니다. 디렉토리에 52 개의 폴더가 있습니다. 각 폴더는 다른 이름을 가지고 있으며 각각에 약 40 개의 파일이 있습니다. 특정 폴더의 이름을 추출하여 특정 폴더의 파일 이름에이 이름을 첨부하려고합니다. 각 폴더에 파일이 31 개 이하일 때 정상적으로 작동했습니다. 그러나 특정 폴더의 파일 수가 31을 초과 할 때마다 내가 작성한 이름 바꾸기 알고리즘이 실패했습니다. 더 많은 파일이있을 때 충돌하는 이유를 알아낼 수 없습니다. 왜 이해한다면 저를 계몽 해주십시오 ...! 나는 코드를 부착 해요 :directory_iterator file_iter 폴더의 파일 이름을 바꿉니다.
int main(int argc, char** argv){
directory_iterator end_iter;
directory_iterator file_itr;
string inputName;
string checkName;
inputName.assign(argv[1]);
if (is_directory(inputName))
{
for (directory_iterator dir_itr(inputName); dir_itr != end_iter; ++dir_itr)
{
if (is_directory(*dir_itr))
{
for (directory_iterator file_itr(*dir_itr); file_itr != end_iter; ++file_itr)
{
string folderName(dir_itr->path().filename().string());
if (is_regular_file(*file_itr))
{
std::string fileType = file_itr->path().extension().string();
std::transform(fileType.begin(), fileType.end(), fileType.begin(), (int(*)(int))std::toupper);
if (fileType == ".JPG" || fileType == ".JPEG" || fileType == ".JPG" || fileType == ".PGM")
{
string filename(file_itr->path().string());
string pathName(file_itr->path().parent_path().string());
string oldName(file_itr->path().filename().string());
cout << folderName << endl;
folderName += "_";
folderName += oldName;
string newPathName = pathName + "\\" + folderName;
cout << pathName <<"\\"<< folderName << endl;
//RENAMING function
rename(file_itr->path(), path(newPathName.c_str()));
}
}
}
}
}
} }
어떤 시점에서 디버깅을 시도했는지, 왜 충돌했는지 확인해 보셨습니까? 또한, 캐스트'(int (*) (int)) std :: toupper'는 위험한 것처럼 보입니다. char는'int'가 아닙니다. – tehlexx
실제로, 그 충돌하지. 31 명 미만의 사진이있을 때. 이름 바꾸기가 정상적으로 작동합니다. 예 : 첫 번째 폴더 이름이 '1'이면 파일 이름이 1_133422394789.jpg로 바뀝니다. 그러나 파일 수가 많을 경우 이름 바꾸기는 1_1_133422394789.jpg, 1_1_1_1_12874638746.jpg 등이됩니다. 이 prob는 'end_iter'인 – cameo
과 관련이 있다고 생각하지만 31 세가 넘으면 충돌이 발생합니까? 다른 파일/폴더 이름을 사용해 보셨습니까? 어쩌면 그 중요한 번호가 아니라 파일 이름. 어쩌면 당신은 그것이 작동하는 폴더/파일에 대한 예제를 게시 할 수 있으며, 그렇지 않은 경우에는 예제를 게시 할 수 있습니다. – tehlexx