IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Je ne comprends pas pourquoi il declenche une assertion


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Par défaut 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 : 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();
        }
    }

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    Excel ouvre le fichier en mode exclusif, donc si le fichier est ouvert par Excel ton ouverture échoue avec une assertion d'erreur, d'ailleurs consulte l'erreur qui doit être le code 32: sharing violation ...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Par défaut
    Est ce que je peux prevenir l'utilisateur ? (Car en release, cela ne s'affiche pas)
    C'est plus une question de curiosité car si cela reste comme ca, ca me va trés bien.

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    he bien il te suffit de tester l'open ,si open renvoie FALSE c'est que le fichier n'est pas ouvert...
    tel que tu as utilisé open il n'y a pas d'assertion d'erreur ton try catch est inutile.
    et si ça plante sur le close c'est parce que open a échoué, le handle de fichier est null, l'appel de close provoque l'erreur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/12/2010, 10h33
  2. Réponses: 4
    Dernier message: 07/01/2008, 23h48
  3. Réponses: 2
    Dernier message: 14/01/2006, 20h29
  4. Comprends pas pourquoi ca marche pas
    Par cellimo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/11/2005, 22h10
  5. error LNK 2019... comprends pas pourquoi ?
    Par MonsieurAk dans le forum MFC
    Réponses: 2
    Dernier message: 29/04/2005, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo