Je ne comprends pas pourquoi il declenche une assertion
Bonjour,
J'ouvre un fichier toto.xls avec un OpenFileDialog. J'ouvre ce fichier avec Cfile::Open . L'ouverture se passe bien. (Pas d'exceptions déclenchés) .
Je fais le File.Close() à la fin et la ,j'ai un ASSERT. Quand je remonte l'erreur en debug, voici la ligne qui cloche.
Code:
ASSERT(m_hFile != (UINT)hFileNull);
Il se déclenche uniquement si le fichier est déjà ouvert dans excel par exemple.
En regardant les valeurs de m_hFile et de hFileNull, elles sont bien différentes.
Je sais que ce n'est pas un probleme bloquant car l'ASSERT ne se déclenchera plus dans la release, mais j'aimerai bien savoir le pourquoi.
Merci
Julien
Fonction présente dans la Class CFile.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| void CFile::Close()
{
ASSERT_VALID(this);
ASSERT(m_hFile != (UINT)hFileNull); //Erreur la !
BOOL bError = FALSE;
if (m_hFile != (UINT)hFileNull)
bError = !::CloseHandle((HANDLE)m_hFile);
m_hFile = (UINT) hFileNull;
m_bCloseOnDelete = FALSE;
m_strFileName.Empty();
if (bError)
CFileException::ThrowOsError((LONG)::GetLastError());
} |
Fonction de mon code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| void RunPattern::OnButton1()
{
// TODO: Add your control notification handler code here
CFileDialog FileOpenDialog(
TRUE,
NULL,
NULL,
OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST,
"", // filter
AfxGetMainWnd()); // the parent window
if(FileOpenDialog.DoModal()==IDOK)
{
CEdit *pEdit=static_cast<CEdit*>(GetDlgItem(IDC_EDIT1));
CFile File;
try{
if(0!=File.Open(FileOpenDialog.GetPathName(),CFile::modeRead));
pEdit->SetWindowText(File.GetFilePath());
}
catch(CFileException *pEx)
{
Exceptions::CFile_Exception(pEx);
}
pEdit->SetWindowText(File.GetFilePath());
File.Close();
}
} |