TCHAR chFilterData[]="NFS FILE (*.nfd)| *.nfd |ALL FILE (*.*)| *.*||";
CFileDialog dlg(TRUE,"*.nfd","*.nfd",OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,chFilterData);;
dlg.m_ofn.lpstrInitialDir = "E:\\temp\\NFsTrs\\Debug";//这里设置打开目录!
dlg.m_ofn.lpstrTitle="打开SH.nfd数据";
if(IDOK==dlg.DoModal())
strPath=dlg.GetPathName();

hFs=CreateFile(strPath ,GENERIC_READ ,FILE_SHARE_READ ,
NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS , NULL);
if( INVALID_HANDLE_VALUE == hFs ) 
{
AfxMessageBox("不能打开SH.nfd文件 !");
return ;
}
----------------
问题:
1.就是出现对话框之后,有时候不能够在*.nfd类型文件过滤器状态下显示*.nfd类型文件。
2.或者是第一次显示*.nfd类型文件过滤器状态后,不做选择,跳到*.*文件过滤器状态,显示所有文件,正常。但是,回头重新选*.nfd类型文件过滤器,就不能够显示*.nfd类型文件了!!!

解决方案 »

  1.   

    这是怎么回事?怎么解决?vc6.0、.net2001 win2000系统下都是如此。上述代码在MFC多文档框架的doc类中菜单命令调用。
      

  2.   

    这样就OK了,注意空格 TCHAR chFilterData[]="MyType Files (*.nfd)|*.nfd|All Files (*.*)|*.*||";//"NFS FILE (*.nfd)| *.nfd |ALL FILE (*.*)| *.*||";改写这一句,注意空格!!!
    CFileDialog dlg(TRUE,"*.nfd","*.nfd",OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,chFilterData);;
    dlg.m_ofn.lpstrInitialDir = "E:\\temp\\NFsTrs\\Debug";//这里设置打开目录!
    dlg.m_ofn.lpstrTitle="打开SH.nfd数据";
    CString strPath;
    if(IDOK==dlg.DoModal())
    strPath =dlg.GetPathName();

    HANDLE hFs=CreateFile(strPath ,GENERIC_READ ,FILE_SHARE_READ ,
    NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS , NULL);
    if( INVALID_HANDLE_VALUE == hFs ) 
    {
    AfxMessageBox("不能打开SH.nfd文件 !");
    return ;
    }

      

  3.   

    不得呢,兄弟!~~你做一个MFC程序测试看这是我碰到的最奇怪的事情了
      

  4.   

    你的TCHAR chFilterData[]="NFS FILE (*.nfd)| *.nfd |ALL FILE (*.*)|*.*||";有问题。。===>>>>TCHAR chFilterData[]="NFS FILE (*.nfd)|*.nfd|ALL FILE (*.*)|*.*||";文件后缀名过滤里面有空格了。。如gdsdyl(gdsdyl)所说 自己把空格去掉试试看,我试过没问题。。
      

  5.   

    CString strHello,strPath;
    HANDLE hFs;
    strHello.LoadString(IDS_HELLO);
    cout << (LPCTSTR)strHello << endl;
    TCHAR chFilterData[]="NFS FILE (*.nfd)|*.nfd| ALL FILE (*.*)|*.*||";
    CFileDialog dlg(TRUE,"*.nfd","*.nfd",OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,chFilterData);;
    dlg.m_ofn.lpstrInitialDir = "E:\\temp\\NFsTrs\\Debug";//这里设置打开目录!
    dlg.m_ofn.lpstrTitle="打开SH.nfd数据";
    if(IDOK==dlg.DoModal())
    strPath=dlg.GetPathName();

    hFs=CreateFile(strPath ,GENERIC_READ ,FILE_SHARE_READ ,
    NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS , NULL);
    if( INVALID_HANDLE_VALUE == hFs ) 
    {
    AfxMessageBox("不能打开SH.nfd文件 !");
    return  1;
    }我已测试通过
    是空格的问题
      

  6.   

    The Explorer-style common dialog will not accept spaces around the '|' vertical bar characters used to separate elements of the filter string.
    这是MSDN的说明
      

  7.   

    在定义过滤串时,用\0代替'|'
    TCHAR chFilterData[]="NFS FILE (*.nfd)\0*.nfd\0ALL FILE (*.*)\0*.*\0\0";