Ошибка CFile в Windows Ce - PullRequest
       19

Ошибка CFile в Windows Ce

0 голосов
/ 29 октября 2008

Я использую 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);

Почему это могло быть? Могу ли я даже использовать CFile на WinCE? Я только начинаю со встроенной разработки.

1 Ответ

0 голосов
/ 29 октября 2008

Я не использовал MFC в Windows CE, но в обычных Windows обычная идиома

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

т.е. попробуйте добавить "CFile :: modeWrite" в конструктор. Документация MSDN предполагает, что это необходимо:

Вы можете комбинировать перечисленные ниже опции, используя оператор побитового ИЛИ (|). Требуется одно разрешение на доступ и одна опция общего доступа; режимы modeCreate и modeNoInherit являются необязательными.

Это подразумевает, что всегда нужно указывать один из параметров modeRead или modeWrite.

...