Pergunta

Estou usando o Windows CE 4.2 e o MS incorporado VC ++ 4.0. O código a seguir me dá o erro Access to [file name] was denied., e cria o arquivo, mas não escreve nada para ele.

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

Curiosamente, usando CreateFile funciona bem:

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);

Por que isso poderia ser? Posso usar o CFILE no Wince? Estou apenas começando com o desenvolvimento incorporado.

Foi útil?

Solução

Eu não usei o MFC no Windows CE, mas no Windows comuns, o idioma usual é

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

ou seja, tente adicionar "cfile :: modewrite" ao construtor. A documentação do MSDN sugere que isso é necessário:

Você pode combinar opções listadas abaixo usando o operador bit-out (|). São necessárias uma permissão de acesso e uma opção de compartilhamento; Os modos Modecreate e ModenOniRit são opcionais.

Isso me implica que um dos "modernos" ou "modewrite" deve sempre ser fornecido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top