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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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();
    }
}