关于CFile的读写我有点疑惑 CFile file;
file.open(path,CFile::modeWrite)
往文本中写的时候一定要文本存在吧,如果文本不存在是创建的,得加上CFile::modeCreate是吧?不太明白有时为什么要用CreateFile HANDLE  hFile=CreateFile( Filename,GENERIC_WRITE,FILE_SHARE_READ,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);

CFile   file((int)hFile);不是直接用CFile::modeCreate 就可以创建吗?有什么区别这两个...望详解...问题2:
文本不存在我直接往里面写了(只用了modeWrite如下),在模拟器里面好像文本也创建了一切正常,也没报错...
CFile file;
file.open(path,CFile::modeWrite)
但我在正式平台上运行程序的时候
程序在file.close这句就自动退出了,也没报错,很奇怪...我现在分析可能是文件没创建的原因...
希望高手帮我分析下望高手详细回答上面两个问题,最好帮我详细介绍下CFile类
THX!
  

解决方案 »

  1.   

    CreateFile 是SDK API,是底层
    CFile是MFC类,是基于SDK API的
      

  2.   

    CreateFile是面向过程的,支持各种语言
    CFile是面向对象的,只能在MFC程度里面用
      

  3.   

    file.open(path,CFile::modeWrite) 文件不存在时会Create一个0长度的文件.
    文件存在时把文件文件长度截为0.
      

  4.   

    注意这点区别:
    1.如果文件不存在,而你是moderead,那么就会出错;
    2.如果文件不存在,而采用modewrite,那么系统自动创建一个长度为0的文件,可以往里面写.
    不妨根据这个思路运行一下你的程序,检查一下生成的文件,看看里面内容是否你写入的.
      

  5.   

    void CFile::Close()
    {
    ASSERT_VALID(this);
    ASSERT(m_hFile != (UINT)hFileNull); BOOL bError = FALSE;
    if (m_hFile != (UINT)hFileNull)
    bError = !::CloseHandle((HANDLE)m_hFile); m_hFile = (UINT) hFileNull;
    m_bCloseOnDelete = FALSE;
    m_strFileName.Empty(); if (bError)
    CFileException::ThrowOsError((LONG)::GetLastError());
    }
    以上是CFile::Close()的源代码。其中楼主的程序估计是在最后一行抛出了异常。
    也就是说bError = !::CloseHandle((HANDLE)m_hFile);一句可能有问题。
    但具体的问题,可能与楼主Open的时候设置的参数不当有关系。
      

  6.   

    createfile是win的sdk,任何windows上的文件函数,最终都是调用这个函数来实现的
      

  7.   

    你可以检查open函数的返回值,如果为真表示打开成功,为假表示失败。
      

  8.   

    THX各位了
    莫名其妙的自己又好了