使用CFileDialog
類,我選擇放置在長路徑目錄中的多個文件。當我僅選擇一個或兩個文件時是可以的;但是當我同時選擇三個文件時,它只返回第三個文件路徑的一部分。 (看起來它可能限制爲512個字符)我該如何解決這個問題?當文件路徑很長時,爲什麼CFileDialog :: GetNextPathName不起作用?
回答
MFC使用大小爲_MAX_PATH
的默認緩衝區,這就是您看到該行爲的原因。看看dlgfile.cpp
爲CFileDialog::CFileDialog
實施,你會看到m_ofn.lpstrFile
和m_ofn.nMaxFile
被設置。
如果需要,可以指定較大的緩衝區。調用DoModal
之前,你可以訪問CFileDialog::m_pOFN
成員獲得的指針OPENFILENAME
的CFileDialog
將使用直接更新或致電CFileDialog::GetOFN
去結構的參考和更新。
無論哪種方式,你會有所幫助:http://msdn.microsoft.com/en-US/library/ms646839(v=vs.80).aspx
如果你打算去通過它周圍工作的麻煩,您可能還需要考慮使用[通用項目對話框](http://msdn.microsoft.com/en-US/library/bb776913.aspx)代替。該'GetOpenFileName' API與Vista的發佈過時了,但仍然支持遺留應用程序。 – 2013-02-15 23:35:17
謝謝。您的描述以及鏈接對我有用。 ;) – Javid 2013-02-16 10:12:17
假設你的代碼看起來是這樣的:
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();
- 1. 爲什麼Hadoop FTPFileSystem.listStatus(路徑路徑)不起作用?
- 2. 當使用UNC文件路徑時Asp.net FileUploader不起作用
- 3. 文件路徑將不起作用
- 4. 爲什麼我的jpg文件的絕對路徑不起作用
- 5. 爲什麼很多人使用me.projectname.main作爲包路徑?
- 6. 燒瓶:爲什麼在根路徑中有路徑轉換器不起作用?
- 7. 長文件路徑
- 8. Rails - 新路徑不起作用。爲什麼?
- 9. 爲什麼相對路徑在CMS中不起作用?
- 10. 爲什麼我的剪輯路徑不起作用?
- 11. 爲什麼相對路徑不起作用?
- 12. 爲什麼路徑在Xcode 4.2中不起作用?
- 13. 當我使用絕對路徑時,爲什麼不會附加CSS文件?
- 14. 爲什麼路由根不起作用?
- 15. Android爲什麼它不起作用,當我使用從文件
- 16. 當列表很長時,VB6列表循環不起作用
- 17. 爲什麼IIS7需要很長時間
- 18. 爲什麼命令不泊塢工作文件的路徑
- 19. 爲什麼svg路徑不工作?
- 20. MFC CFileDialog - 在Windows 7上獲取特殊文件夾路徑
- 21. 爲什麼var_dump顯示文件路徑?
- 22. 當路徑與文件名稱相同時htaccess重寫不起作用
- 23. .jar導出時不起作用(文件路徑)
- 24. 爲什麼Int64.MaxValue很長?
- 25. 爲什麼這個長時間的投票不起作用?
- 26. 爲什麼長時間點擊PullToRefreshListView不起作用?
- 27. 臨時路徑變量不起作用
- 28. 爲什麼JavaScript將文件路徑作爲JSP中的假路徑?
- 29. C#SHA256在文件路徑很長的文件上
- 30. XmlSerializer.Serialize需要很長時間...爲什麼?
是否有窗口的'MAX_PATH'辦? – bames53 2013-02-15 21:30:50
它使用大小'_MAX_PATH'的緩衝默認MFC做。它可以被重寫。 – 2013-02-15 21:32:10