http://www.csdn.net/expert/topic/830/830719.xml?temp=.3880121
里还有50分,全部奉上;怎样判断一个CFile的实体file是open过了,还是已经close?

解决方案 »

  1.   

    我以前也有这个疑问,在查找了MSDN以后,我没有找到直接的办法。
    后来我就这样了:设置一个布尔类型的状态变量,初始化的时候设置为false,然后当打开文件时,设置为true,当关闭以后设置成false。这样也很好的完成了我的目标。
    是不是很搞笑?
    hehe........
      

  2.   

    设置一个布尔类型的状态变量,初识化为false,打开文件的时候,设置位true,关闭文件以后设置为false。这样不就行了!
    是不是很搞笑??!!
    hehe...............
      

  3.   

    CFile* m_fp; 
    if(!m_fp)
        {
            AfxMessageBox("source file have closed!");
        }
      

  4.   

    请问CFile没有什么函数,或参数吗?
      

  5.   

    确实没有象IsOpen()一样的函数,如果非要这样,你可以从CFile派生一个类,比如CMyFile,再加入一个BOOL型私有成员m_bOpened;再重写Open和Close函数。
      

  6.   

    CFile files;
    BOOL bi = files.Open("D:\\test\\1.doc",CFile::modeRead);
    若返回值为非零,则成功;若返回为“0”,则不成功。
    Cfile类的Open成员函数的声明如下:
             virtual BOOL Open(
                               LPCTSTR lpszFileName,
                               UINT nOpenFlags,
                               CFileException* pError = NULL 
                 );
    CFile的构造函数的声明如下:
             CFile( );
             CFile(
                  HANDLE hFile 
                 );
             CFile(
                   LPCTSTR lpszFileName,
                   UINT nOpenFlags 
                 );
      

  7.   

    如果只是为了防止多个用户或者进程打开同一个文件,可以将文件以独占方式打开file.Open( filename, CFile::shareExclusive );,也可以允许别的进程来读,但不允许写file.Open( filename, CFile::shareDenyWrite );,还可以只允许写不允许读CFile::shareDenyRead。
      

  8.   

    如已经打开,下次打开时Open函数返回“0”,否则,返回非零值。
      

  9.   

    谢谢各位,
    但我检查是因为在对该实体close时不能确定是否已经open。
      

  10.   

    谢谢各位,
    但我检查这个标志是因为在对该实体close时不能确定是否已经open。
      

  11.   

    利用OpenFile()函数,得到文件的句柄,再利用函数GetLastError()来得到其函数的扩展错误。如果错误吗是ERROR_ALREADY_EXISTINGS,则文件已经打开。这其实和设置一个状态变量差不多。