7

クラスを使用CFileDialogして、長いパスを持つディレクトリに配置された複数のファイルを選択します。1 つまたは 2 つのファイルを選択するだけで問題ありません。しかし、同時に 3 つのファイルを選択すると、3 番目のファイル パスの一部しか返されません。(おそらく 512 文字に制限されているようです) どうすれば解決できますか?

4

2 に答える 2

5

MFC はサイズの既定のバッファーを使用するため、_MAX_PATHその動作が見られます。dlgfile.cppの実装を見て、設定されているCFileDialog::CFileDialogことがわかります。m_ofn.lpstrFilem_ofn.nMaxFile

必要に応じて、より大きなバッファーを指定できます。呼び出す前にDoModal、メンバーにアクセスしてが使用CFileDialog::m_pOFNするポインタを取得して直接更新するか、 を呼び出して構造体への参照を取得して更新することができます。OPENFILENAMECFileDialogCFileDialog::GetOFN

いずれにせよ、これは役に立つでしょう: http://msdn.microsoft.com/en-US/library/ms646839(v=vs.80).aspx

于 2013-02-15T21:31:29.610 に答える
0

コードが次のようになっていると仮定します。

CFileDialog dialog(...);
dialog.DoModal();

サポートするファイルの最大数を決定します。次に例を示します。

#define MAX_FILE_NAMES 256

を呼び出す前にこれを追加しますDoModal

CString data;
dialog.m_pOFN->nMaxFile = (MAX_FILE_NAMES*(MAX_PATH+1))+1;
dialog.m_pOFN->lpstrFile = data.GetBuffer((MAX_FILE_NAMES*(MAX_PATH+1))+1);

を呼び出した後にこれを追加しDoModalます。

data.ReleaseBuffer();
于 2016-11-22T17:50:43.997 に答える