Why CFileDialog::GetNextPathName doesn't work when the file path is long?

前端 未结 2 962
广开言路
广开言路 2020-12-20 18:05

Using CFileDialog class, I select multiple files placed in a directory with a long path. It\'s OK when I select only one or two files; but when I select three f

相关标签:
2条回答
  • 2020-12-20 18:52

    MFC uses a default buffer of size _MAX_PATH and that's why you are seeing that behavior. Look at dlgfile.cpp for the implementation of CFileDialog::CFileDialog and you will see m_ofn.lpstrFile and m_ofn.nMaxFile being set.

    You can specify a larger buffer if you want to. Before calling DoModal you can either access the CFileDialog::m_pOFN member to get a pointer to the OPENFILENAME that the CFileDialog will use and update it directly or call CFileDialog::GetOFN to get a reference to the structure and update that.

    Either way you will find this helpful: http://msdn.microsoft.com/en-US/library/ms646839(v=vs.80).aspx

    0 讨论(0)
  • 2020-12-20 19:02

    Assuming that your code looks something like this:

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

    Determine the maximum number of files that you wish to support, for example:

    #define MAX_FILE_NAMES 256
    

    Add this before calling 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);
    

    Add this after calling DoModal:

    data.ReleaseBuffer();
    
    0 讨论(0)
提交回复
热议问题