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 のドキュメントでは、これが必要であることが示唆されています。

ビットごとの OR (|) 演算子を使用して、次に示すオプションを組み合わせることができます。1 つのアクセス許可と 1 つの共有オプションが必要です。modeCreate および modeNoInherit モードはオプションです。

これは、「modeRead」または「modeWrite」のいずれかを常に指定する必要があることを意味します。

于 2008-10-29T13:06:07.600 に答える