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 :
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 :
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 :
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 :
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
Partager