我用CreateFile打开一个文件,在没有关闭的情况下,我去打开同分区的另外一个文件,如下: 
HANDLE hDev; 
hDev = CreatFile("g:\\001.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0 , NULL); 
if(hDev == NULL  ¦ ¦ hDev == INVALID_HANDLE_VALUE) 

   return FALSE; 

cFile file; 
CFileException pError; 
BOOL bFlg = file.Open("g:\\002.txt", CFile::modeRead,&pError);  //这步的时候出错了,打不开文件啊。超级郁闷。错误号是5,拒绝访问,各位大侠救命 if(!bFlg  ¦ ¦ pError != 0) 

 return FALSE; 

file.Read(...); 
file.Close();

解决方案 »

  1.   

    我是楼主,提示下,第一个文件是可以打开成功的,但是运行了第一个CreateFile后,我试着去双击硬盘,就已经打不开了,以后就不用说了。相反,如果你先用CFile,再用CreateFile,就可以,然后如果再用CFile,就挂了,不知道是怎么回事!有谁可以解决啊
      

  2.   

          楼主的代码写得乱七八糟的,严重怀疑楼主能否编译通过。CreatFile应是CreateFile,还有cFile应是CFile(C++代码是区分大小写的),还有pError != 0这一句,能这样比较吗?估计是&pError != 0吧。
      

  3.   

        我的测试结果,没有错误发生,测试代码如下:void CTestDlg::OnOK() 
    {
    // TODO: Add extra validation here
    HANDLE hDev; 
    hDev = ::CreateFile("E:\\Program\\001.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0 , NULL); 
    if(hDev == NULL||hDev == INVALID_HANDLE_VALUE) 

       return ; 

    CFile file; 
    CFileException pError; 
    BOOL bFlg = file.Open("E:\\Program\\002.txt", CFile::modeRead,&pError);  
    if((bFlg==FALSE)) 

           return ; 
    //    pError.ReportError();

    file.Close();}   楼主的
    if(!bFlg  ¦ ¦ pError != 0) 中的pError != 0是多余的
      

  4.   

    只有Open返回FALSE时,才需要pError。
      

  5.   

    CreateFile失败只会返回INVALID_HANDLE_VALUE