2018년 3월 12일 월요일

CFileDialog에서 여러 파일을 다루는 부분

255개 이상의 파일의 이름을 가져오려고 했는데 그 이상은 에러.

 CFileDialog dlg(TRUE, "", NULL, OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_EXPLORER | OFN_LONGNAMES | OFN_ALLOWMULTISELECT, szFilter, NULL);

 char filename[10000] = {0};
 dlg.m_ofn.lpstrFile = filename;
 dlg.m_ofn.nMaxFile = 10000-1;

  여기서 첫번째 오류   LEESH







좀더 찾아보니.

    기본적으로 2048 버퍼 사이즈로 설정이 되어 있기 때문에

     보통 20개 글자라고 하면...  2048/20 정도만 올라옴.

그래서,  위와 같이 늘려주었는데,   10,000 사이즈로 버퍼를 잡았으니,

  글자수가 40개 이면,,,    250개 정도 파일만 다루게 됨.  따라서,


  CFileDialog dlgFile(TRUE);
  CString fileName;
  const int c_cMaxFiles = 10000;
  const int c_cbBuffSize = (c_cMaxFiles * (MAX_PATH + 1)) + 1;
  dlgFile.GetOFN().lpstrFile = fileName.GetBuffer(c_cbBuffSize);
  dlgFile.GetOFN().nMaxFile = c_cMaxFiles;

   이렇게 해줘야 10000개정도 다룰수 있음.

https://social.msdn.microsoft.com/Forums/vstudio/en-US/828d548e-2c9b-460f-8138-339e2d557878/cfiledialog-and-ofnallowmultiselect?forum=vcgeneral