Erreur CFile sur Windows Ce
-
05-07-2019 - |
Question
J'utilise Windows CE 4.2 et MS Embedded VC ++ 4.0. Le code suivant m'indique que l'erreur L'accès à [nom du fichier] a été refusé.
. Il crée le fichier mais n'y écrit rien.
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
Fait intéressant, l’utilisation de CreateFile
fonctionne bien:
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);
Pourquoi cela pourrait-il être? Puis-je même utiliser CFile sur WinCE? Je commence tout juste avec le développement intégré.
La solution
Je n'ai pas utilisé MFC sous Windows CE, mais sous Windows ordinaire, l'idiome habituel est
mFile.Open(tmp, CFile::modeCreate|CFile::modeWrite);
i.e. essayez d’ajouter " CFile :: modeWrite " au constructeur. La documentation MSDN suggère que cela est nécessaire:
Vous pouvez combiner les options répertoriées ci-dessous à l'aide de l'opérateur bitwise-OR (|). Une autorisation d'accès et une option de partage sont requises. les modes modeCreate et modeNoInherit sont facultatifs.
Cela signifie pour moi que l'un des " modeRead " ou " modeWrite " doit toujours être fourni.