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

CFileDialogは"ファイルを開く"とかやった時にでてくるダイアログを
表示させるためのクラスです。
このダイアログで同時に2つ以上のファイル名の取得方法を紹介しますので
基本的なCFileDialogの使い方は自分で調べるなりして下さい。

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

そこで、まずファイル名を保存するバッファを十分に確保し
データメンバのm_ofn(OPENFILENAME構造体)のlpstrFile
ファイル名を保存するバッファのアドレスを新しく割り当ててやります。
この時、用意したバッファの内容が0で埋め尽くされていないとエラーが発生するので
割り当てる前に初期化する必要があります。
後、これだけでは最大で読み込める文字数が少ないままになっているので
m_ofn.nMaxFileに用意したバッファのサイズを代入してください。

以上をまとめて例にすると以下のようになります。


CFileDialog 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));
    }
}

< 戻る << HOME ©1999-2001 by Akky, All right reserved.