Bonjour tout le monde,

J'essaie de charger un fichier text sur base d'un nom d'un fichier.

D'habitude, ce genre d'opération ne pose pas de problème mais aujourd'hui ça ne fonctionne pas.

voici les méthodes de chargement :

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
bool CTabProduits::Charger(const char* NomFichier)
{
	CChargeurFichierTexte	Chargeur;
 
	return Chargeur.Charger(NomFichier,'\t',FctnTraiterLigne,this);
}
 
bool CTabProduits::FctnTraiterLigne(const CChargeurFichierTexte& Chargeur, void* Contexte)
{
	return ((CTabProduits*)Contexte)->TraiterLigne(Chargeur);
}
 
bool CTabProduits::TraiterLigne(const CChargeurFichierTexte& Chargeur)
{
	if (Chargeur.NombreChamps() == 2) Ajouter(CProduit(Chargeur.Champs(0),atol(Chargeur.Champs(1))));
	return true;
}
 
bool CTabProduits::Ajouter(const CProduit& Modele)
{
	return CTableauGenerique::Ajouter(Modele);
}
Quand il arrive ici :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
	if (Fichier == NULL) return false;
il stoppe le chargement car Fichier est égal à null, il n'a donc pas pu ouvrir le fichier avec ce 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
bool CChargeurFichierTexte::Charger(const char* NomFichier, char UnSeparateur, bool (* FctnTraiterLigne)(const CChargeurFichierTexte&, void*), void* Contexte)
{
	const long		TailleLigne = 500;
	char			Ligne[TailleLigne+1];
	FILE*			Fichier;
 
	if ( (NomFichier == NULL) || (*NomFichier == 0) ) return false;
	Fichier = fopen(NomFichier,"rt");
	if (Fichier == NULL) return false;
	while (fgets(Ligne,TailleLigne,Fichier) != NULL)
	{
		long i = strlen(Ligne);
		if ( (i > 0) && (Ligne[i-1] == '\n') ) Ligne[i-1] = 0;
		if (Definir(Ligne,UnSeparateur))
		{
			if (!FctnTraiterLigne(*this,Contexte))
			{
				fclose(Fichier);
				return false;
			}
		}
	}
	fclose(Fichier);
	return true;
}
on appelle charger depuis le main de cette façon :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
	if(Produit.Charger("produit.txt"))printf("OK");
Voyez vous ce qui cloche ?

Edit :Je viens avec du nouveau :si je mets un autre fichier txt, ça fonctionne, mais pas avec le mien.

j'obtiens ce message d'erreur :

L'instruction à "0x004082d0" emploie l'adresse mémoire "0x00000000000" la mémoire ne peut pas être read.
je viens encore avec du nouveau :

Quand le fichier est vide, il charger j'ai OK, par contre dés que j'ai une ligne dans le fichier, ça plante avec le message ci-dessus.


Merci d'avance.

beegees