2013-02-15 7 views
6

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

+0

それはウィンドウの 'MAX_PATH'としなければならないのか? – bames53

+0

デフォルトでは、サイズが '_MAX_PATH'のバッファを使用するMFCと関係があります。オーバーライドすることができます。 –

答えて

5

MFCはデフォルトのサイズが_MAX_PATHのバッファを使用しているため、その動作が確認されています。 にはCFileDialog::CFileDialogの実装があり、m_ofn.lpstrFilem_ofn.nMaxFileが設定されています。

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

あなたは、これが役に立つでしょういずれかの方法:たとえば、あなたがサポートするファイルの最大数を決定

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

:あなたのコードは次のようになりますと仮定するとhttp://msdn.microsoft.com/en-US/library/ms646839(v=vs.80).aspx

+1

この問題を回避するには、[Common Item Dialogs](http://msdn.microsoft.com/en-US/library/bb776913.aspx)の使用を検討してください。代わりに。 'GetOpenFileName' APIはVistaのリリースで廃止されましたが、従来のアプリケーションではまだサポートされています。 –

+0

ありがとうございます。あなたの説明とリンクも私のために働いた。 ;) – Javid

0

#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(); 
関連する問題