MFCのCFileDialogで複数のファイルを取得する

OFN_ALLOWMULTISELECTを設定すると複数のファイルが選択できるようになります。
しかし、これだけではたくさんファイルを選択すると不具合が発生します。
これはファイル名を受け取るバッファがデフォルトのままでは少ないため記憶できる限界を超えてしまうからです。

なので0初期化した大きいバッファを用意して渡してあげる必要があります。

FileDialog dlg(TRUE, NULL, NULL,
                OFN_FILEMUSTEXIST |
                OFN_ALLOWMULTISELECT |   //ファイルを複数設定させる為のフラグ
                OFN_HIDEREADONLY,
                _T("すべてのファイル(*.*)|*.*||"));
char szFileNameBuffer[10000] = {0};      // ファイル名を保存させる為のバッファ
dlg.m_ofn.lpstrFile = szFileNameBuffer;  // バッファの割り当て
dlg.m_ofn.nMaxFile = 10000;              // 最大文字数の設定
if(dlg.DoModal() == IDOK)
{
    POSITION pos = dlg.GetStartPosition();
    while(pos)
    {
        AfxMessageBox(dlg.GetNextPathName(pos));
    }
}