Я хотел переименовать файлы в каталоге. В каталоге 52 папки. Каждая папка имеет свое имя и содержит около 40 файлов в каждой из них. Я хотел извлечь имя определенной папки и прикрепить это имя к имени файлов в этой конкретной папке. Это работало нормально, когда в каждой папке было всего 31 файл или меньше. Но всякий раз, когда количество файлов в определенной папке превышало 31, алгоритм переименования, который я написал, терпел неудачу. Я не могу понять, почему он падает, когда есть больше файлов. Просветите меня, если вы понимаете, почему ...! Прикрепляю код:
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
. - person tehlexx   schedule 29.06.2012