>

C ++ 및 Boost :: filesystem을 사용하여 프로그램을 작성 중입니다. 프로그램은 주어진 디렉토리에서 사진을 찍고 폴더로 옮깁니다. 각 폴더는 주어진 수의 사진 만 보유해야합니다.

#include<string>
#include<boost/filesystem.hpp>
using namespace std;
using namespace boost::filesystem;
vector<path> new_folders; //vector of paths that will be used to copy things
//I know a global variable is a bad idea, but this is just a simplified example of my program    
void someFunction(path somePath)
{
  directory_iterator iter(somePath);
  directory_iterator end_iter;
  int count = 0;//used in the naming of folders
  while(iter != end_iter)
  {
    string parentDirectory = iter->path().string(); 
    string newFolder = "\\Folder " + to_string(count+1);
    parentDirectory.append(newFolder);
    path newDir = parentDirectory;
    create_directory(newDir);//create new folder in parent folder
    new_folders.push_back(newDir); //add path to vector
    count++;
    iter++;
  }
}

void fill_folders(path pic_move_from, const int MAXIMUM)
{
  //this iterator does not account for the new folders that were made      
  //-------------------- HERE IS WHERE the problem is located
  directory_iterator iterate(pic_move_from);
  directory_iterator end_iter;
  //fill the new folders with pictures
  for (int folderNum = 0; folderNum < new_folders.size(); folderNum++)
  {
    path newFolder = new_folders.at(folderNum);
    int loopCount = 0; //for the following while loop
    while (loopCount != MAXIMUM && iterate != end_iter)
    {
      if(is_regular_file(*iterate) && img_check(iterate))//item must be a picture to be copied
      { 
        create_copy_multifolder(iterate, newFolder);
      }//end if
      iterate++;
      //the loopCount in the while loop condition should be the max number of folders
      loopCount++;
    }//end while loop
  }//end for loop
}//end fill_folders function

int main()
{
  path myPath = "C:\\Users\\foo";
  const int MAX = 2; //maximum number of pictures per folder
  someFunction(myPath);
  fill_folders(myPath, MAX); 
  return 0;
}

pic_move_from 경로  다른 기능에 사용되었습니다. 이 다른 함수는이 path 에 디렉토리 반복자를 사용했습니다. 동일한 기능 디렉토리에서 path pic_move_from 가 참조하는 디렉토리에 추가되었습니다. . 디렉토리의 모든 그림을 새로 추가 된 서브 디렉토리로 옮길 수 있도록이 디렉토리에 대해 새 반복자를 작성하려고했습니다. 그러나 새 directory_iterator는 디렉토리의 새 항목에 대해 작동하도록 "업데이트"되지 않았습니다. 그렇다면 directory_iterator를 어떻게 "업데이트"합니까?

업데이트 :이 코드를 최대한 단순화하여 아래의 테스트/예제를 만들었습니다. 그리고이 예제는 잘 작동하고 두 번째 반복 중에 새 폴더를 인쇄하므로 원본 코드의 모든 내용을 다시 확인해야합니다.

string pathToFile = "C:\\foo";
path myPath();
directory_iterator iter(pathToFile);
directory_iterator end_iter;
while (iter != end_iter)
{
    cout << endl << iter->path().filename().string() << endl;
    iter++;
}
string pathToNew = pathToFile;
pathToNew.append("\\Newfolderrrrr");
create_directory(pathToNew);
directory_iterator iterate(pathToFile);
directory_iterator end_iterate;
while (iterate != end_iterate)
{
    cout << endl << iterate->path().filename().string() << endl;
    iterate++;
}

  • 답변 # 1

    디렉토리 이터레이터에 문제가 없었거나 어떻게 사용했는지 알 수 있습니다.

    코드에 논리적 오류 인 또 다른 결함이있었습니다.

    이 솔루션은 몇 가지 코드 블록을 간단하게 재배 열하는 것이 었습니다.

    모든 혼란에 대해 죄송합니다.

관련 자료

  • 이전 intel - 벡터 명령어 인코딩에 왜 1의 보수가 여전히 사용됩니까?
  • 다음 iphone - 핵심 데이터 혼란