2013-02-15 67 views
6

使用CFileDialog類,我選擇放置在長路徑目錄中的多個文件。當我僅選擇一個或兩個文件時是可以的;但是當我同時選擇三個文件時,它只返回第三個文件路徑的一部分。 (看起來它可能限制爲512個字符)我該如何解決這個問題?當文件路徑很長時,爲什麼CFileDialog :: GetNextPathName不起作用?

+0

是否有窗口的'MAX_PATH'辦? – bames53 2013-02-15 21:30:50

+0

它使用大小'_MAX_PATH'的緩衝默認MFC做。它可以被重寫。 – 2013-02-15 21:32:10

回答

5

MFC使用大小爲_MAX_PATH的默認緩衝區,這就是您看到該行爲的原因。看看dlgfile.cppCFileDialog::CFileDialog實施,你會看到m_ofn.lpstrFilem_ofn.nMaxFile被設置。

如果需要,可以指定較大的緩衝區。調用DoModal之前,你可以訪問CFileDialog::m_pOFN成員獲得的指針OPENFILENAMECFileDialog將使用直接更新或致電CFileDialog::GetOFN去結構的參考和更新。

無論哪種方式,你會有所幫助:http://msdn.microsoft.com/en-US/library/ms646839(v=vs.80).aspx

+1

如果你打算去通過它周圍工作的麻煩,您可能還需要考慮使用[通用項目對話框](http://msdn.microsoft.com/en-US/library/bb776913.aspx)代替。該'GetOpenFileName' API與Vista的發佈過時了,但仍然支持遺留應用程序。 – 2013-02-15 23:35:17

+0

謝謝。您的描述以及鏈接對我有用。 ;) – Javid 2013-02-16 10:12:17

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(); 
相關問題