質問

Windows CE 4.2およびMS Embedded VC ++ 4.0を使用しています。次のコードでは、エラー[ [ファイル名]へのアクセスが拒否されました。]が表示され、ファイルは作成されますが、何も書き込まれません。

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を使用することもできますか?組み込み開発を始めたばかりです。

役に立ちましたか?

解決

Windows CEではMFCを使用していませんが、通常のWindowsでは、通常のイディオムは

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

i.e。 " CFile :: modeWrite"を追加してみてください。コンストラクターに。 MSDNドキュメントは、これが必要であることを示唆しています:

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

これは、" modeRead"または" modeWrite"常に指定する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top