0

我正在使用 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 吗?我刚刚开始使用嵌入式开发。

4

1 回答 1

0

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

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

即尝试将“CFile::modeWrite”添加到构造函数中。MSDN 文档建议这是必要的:

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

这对我来说意味着必须始终提供“modeRead”或“modeWrite”之一。

于 2008-10-29T13:06:07.600 回答