Multiple File Selection Without Any Extra Code

Environment: DOC View

This is in response to the column "Multiple File Select in File Open Dialog" under the section "Document—View/Misc."

Instead of creating a new class (derived from CDocManager), I felt that I could accomplish the same functionality in a simpler way. I have already implemented a code in which I get the file name from the user, using CFileDialog on "OnFileOpen". This is the message handler for ID_FILE_OPEN. This could be done just by adding the style "OFN_ALLOWMULTISELECT" in the CFileDialog Constructor.

Here's the code snippet:

void MYApp::OnFileOpen( )
{
  CString csRootPath( "E:\\" );
  //Display "File Open"/"File SaveAs" Dialog depending
  //upon     //"p_bOpen"
  CFileDialog cfileDlg( p_bOpen ,NULL,NULL,OFN_ALLOWMULTISELECT,
                        "All files (*.*)|*.*|");

  CString csFileDlgTitle;
  csFileDlgTitle.LoadString( "File Open" );

  cfileDlg.m_ofn.lpstrTitle = csFileDlgTitle;
  cfileDlg.m_ofn.lpstrInitialDir = csRootPath;

  int nRet = cfileDlg.DoModal( );
  ASSERT( ( nRet != IDOK ) || ( nRet != IDCANCEL ) );
}

Fine. How do you get the selected file name(s)?

Simple. Use GetStartPosition() and GetNextPathName() of CFileDialog to iterate the selected file names.

Here's the code snippet:

POSITION pos ( cfileDlg.GetStartPosition() );

while( pos )
{
  CString csFileName(  cfileDlg.GetNextPathName( pos ) );
  //implement ur fn to open the file accordingly
}

With Regards,
Sriram



Comments

  • This is insufficient

    Posted by Legacy on 11/05/2002 12:00am

    Originally posted by: Shrishail Rana

    The variable to hold multiple files is limited. So at max it can hold 30 or 40 files depending on the filenames
    
    

    TCHAR FileNameList[8192]= {0};
    CFileDialog fileDlg(T...................);
    // display the file dialog
    //now replace the original buffer with the more length.......
    fileDlg.m_ofn.lpstrFile = FileNameList;
    fileDlg.m_ofn.nMaxFile=8192;

    if(fileDlg.DoModal()==IDOK)
    {
    POSITION p = fileDlg.GetStartPosition();
    int itemcnt = m_cListCtrl.GetItemCount();
    while(p)
    {
    FilePath = fileDlg.GetNextPathName(p);
    ...............}

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: March 19, 2015 @ 1:00 p.m. ET / 10:00 a.m. PT The 2015 Enterprise Mobile Application Survey asked 250 mobility professionals what their biggest mobile challenges are, how many employees they are equipping with mobile apps, and their methods for driving value with mobility. Join Dan Woods, Editor and CTO of CITO Research, and Alan Murray, SVP of Products at Apperian, as they break down the results of this survey and discuss how enterprises are using mobile application management and private …

  • Remember getting your first box of LEGOS as a kid? How fun it was putting the pieces together, collaborating with your friends to create something new? Now, as an IT professional, assembling and maintaining a Lego-like collaboration infrastructure isn't what you signed up for. Piecing together disparate systems of record for email, web meetings and other applications is about as painful as stepping on a pile of Legos. Download the e-book to learn how implementing a collaboration system connects systems of …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date