代码之家  ›  专栏  ›  技术社区  ›  Nick

Windows CE上的文件错误

  •  0
  • Nick  · 技术社区  · 16 年前

    我正在使用Windows CE 4.2和MS Embedded VC++4.0。下面的代码给出了错误 Access to [file name] was denied. ,它创建文件,但不向其中写入任何内容。

    CString tmp;
    tmp.Format(_T("%s%d"), mFileName, ++ctr);
    TRY 
    {
      mFile.Open(tmp, CFile::modeCreate);
      mFile.Write(&data[ctr%2], 1);
      mFile.Close();
    }
    CATCH (CException, e)
    {
      TCHAR szCause[255];
      CString strFormatted;
    
      e->GetErrorMessage(szCause, 255);
      strFormatted += szCause;
      AfxMessageBox(strFormatted);
    }
    END_CATCH
    

    有趣的是,使用 CreateFile 工作精细:

    CString tmp;
    tmp.Format(_T("%s%d"), mFileName, ++ctr);
    
    hFile = CreateFile(tmp, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL /*| FILE_FLAG_WRITE_THROUGH*/, 0);
    WriteFile(hFile, &(data[ctr%2]), 1, &bytesWritten, NULL);
    CloseHandle(hFile);
    

    为什么会这样?我能在Wince上使用cfile吗?我刚开始做嵌入式开发。

    1 回复  |  直到 16 年前
        1
  •  0
  •   DavidK    16 年前

    我没有在WindowsCE上使用过MFC,但是在普通的Windows上,通常的习惯用法是

      mFile.Open(tmp, CFile::modeCreate|CFile::modeWrite);

    例如,尝试将“cfile::modewrite”添加到构造函数中。msdn文档表明这是必要的:

    您可以使用按位或()运算符组合下面列出的选项。需要一个访问权限和一个共享选项;modecreate和modenInherit模式是可选的。

    这意味着我必须始终提供“moderead”或“modewrite”之一。