CFileDialog::GetNextPathName возвращает усеченный путь, если он слишком длинный

Я использую CFileDialog для открытия файлов, я разрешаю множественный выбор, когда пользователь выбирает несколько файлов, я перебираю их, используя метод CFileDialog::GetNextPathName, но если имя файла слишком большое, оно возвращает его усеченным, я не знаю, почему тот??

Файлы были созданы со случайными именами, и файлы были созданы успешно, но когда я попытался открыть их с помощью CFileDialog, некоторые из них были слишком длинными, как

"dFR.45434$#%@#3$FDGH.reR'FGDF,jh'+=gh.fghj&^%$!()rthyfgf.gfdhdfAZXCNMNrtyuIUU;k][sdgf]fd(jk~-.ggfddFR.45434$#%@#3$FDGH.reR'FGDF,jh'+=gh.fghj&^%$!()rthyfgf.gfdhdfAZXCNMNrtyuIUU;k][sdgf]fd(jk~-.ggfddFR.45434$#%@#3$FDGH.reR'FGDF,jh'+=gh.fghj&^%$!()rthyfgf"

метод CFileDialog::GetNextPathName возвращает его с некоторыми потерянными символами в конце. Я не знаю в чем проблема! Я уверен, что полный путь к файлу имеет длину меньше, чем MAX_PATH

Решение


Я думал, что в буфере будет одно за другим имя тьфу, и вызов get next заполнит его следующим, но я обнаружил, что все пути к файлам объединены, разделены символами ' ' или '\0', в зависимости от некоторых флагов, с которыми работает следующее Я в порядке

CFileDialog fd;
UINT maxFiles = 50;
UINT buffSize = maxFiles*(MAX_PATH + 1) +1;
CString buffer;
fd.GetOFN().lpstrFile = buffer.GetBuffer(buffSize);
fd.GetOFN().nMaxFile = buffSize;

if(fd.DoModal() == IDOK)
{
    //get start position using GetStartPosition , iterate over files using GetNextPathName
}
buffer.ReleaseBuffer();

0 ответов

Другие вопросы по тегам