Lire un fichier en c++

Résolu
electroonn Messages postés 49 Date d'inscription mardi 14 février 2006 Statut Membre Dernière intervention 27 novembre 2007 - 18 mars 2007 à 19:52
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 - 22 mars 2007 à 18:29
bonjour,
en fait pour lire dans un fichier  j'utilise la boucle suivante:

vector <string> Vector;
while (!fichierEnvoye.eof())
      {
       fichierEnvoye.read(Paquet,1400);
       Vector.push_back(Paquet);           //on stocke chaque ligne du fichier lu dans un tbl de vector
          vider(Paquet);
      }

la lecture marche tres bien avec les fichier.txt, mais une fois j'essaye d'ouvrir des fichier.doc ou .pdf ou autres, ça bloque dans la 1ere iteration
auriez vous une idee de ce qui cloche dans cette boucle ? peut etre l'utilisation des string ou la classe vector ??

34 réponses

victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
21 mars 2007 à 22:02
Bonjour,

Je t'ai réécris ta fonction de lecture en sachant qu'on ne fait jamais une fonction qui lit et qui stocke tout en mémoire donc pour éviter le plantage j'ai mis un système qui fait qu'au bout du buffer il arrête de lire.

void LireFichier(char* UpLoadFile,char* Buffer, int buffermax)
{
    ifstream fichierEnvoye;

    fichierEnvoye.open(UpLoadFile,ios::in|ios::binary);
    if(fichierEnvoye.fail())
    {
        cout << "Erreur lors de l'ouverture du fichier." << endl;
        system("PAUSE");
        return;
    }
    else
    {
        char Buffer2[2];
        for (int i=0;!fichierEnvoye.eof()&&i<=buffermax;i++)
        {
            fichierEnvoye.read(Buffer2,1);
            Buffer[i]=Buffer[0];
            Buffer[i+1]=0;
            if (i==buffermax)
                cout << "Le buffer n'est pas suffisant pour contenir le fichier";
        }
    }

    fichierEnvoye.close();
}

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
21 mars 2007 à 22:04
Bonjour,

Tu peux l'appeller de la façon suivante :
#define taillebuffer 4096
char buffer[taillebuffer+1];
char nomdufichier[]="C:\nomdufichier.txt";
LireFichier(nomdufichier,buffer,taillebuffer);

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
electroonn Messages postés 49 Date d'inscription mardi 14 février 2006 Statut Membre Dernière intervention 27 novembre 2007
21 mars 2007 à 22:16
le char** est un tableau dynamique a deux dimension ou je stocke tout mon fichier,
moi j'utilise le mode UDP, et je dois m'assurer que les paquets sont bien recus, sinon il faut que je les renvois, c pr ca que je stocke tout mon fichier dsn al memoire pr pouvoir y acceder facilement.
le numero de sequence que j'ajoute permet au recepteur de voir si c bien le paquet qu'il attend ou non, pr pouvoir ensuite acquiescer la reception.
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
21 mars 2007 à 22:24
Bonjour,

Travaille en mode connecté comme ça rien ne se perd et t'es tranquille.
Je crois que tu te complique la vie.

Essaye de stocker en mémoire un fichier d'1Go et tu vera ce que le programme en pense.

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
electroonn Messages postés 49 Date d'inscription mardi 14 février 2006 Statut Membre Dernière intervention 27 novembre 2007
21 mars 2007 à 22:26
pui ce que je fais dans cette ligne
*(Buffer+t);
t++;
c'est que je me deplace ds mon tableau on incrementatnt a chaque fois l'adresse du pointeur. c comme si j'utilisais des indices avec les tableaux.
0
electroonn Messages postés 49 Date d'inscription mardi 14 février 2006 Statut Membre Dernière intervention 27 novembre 2007
21 mars 2007 à 22:27
oui mais le but de tout ce que je fais c d'implementer une solution a base d'UDP qui soit fiable.
pr ce qui est de la taille des fichier, j'ai limité ca a des fichier de 100Meg.
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
21 mars 2007 à 22:32
Bonjour,

Pour se déplacer dans un tableau c'est :
variable[rang]
soit :
Buffer[t]
Dans ton cas préfère le for au while.

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
22 mars 2007 à 16:36
Bonjour,

Aussi préfère faire une fonction qui :
1- ouvre le fichier
2- lis une quantité de buffer
3- envoie le buffer (puis lis la quantité suivante du buffer [appel à l'etape 2] jusqu'à la fin du fichier)
4- ferme le fichier

Le tout séparé, ce qui te permet de ne pas stocker tout en mémoire mais une partie et t'enlève la limite de 100Mo, améliore la stabilité.
L'avantage c'est que tu peux quand même utiliser l'UDP (puisque tu y tient) en renvoyant la partie du buffer qui n'a pas été totalement reçue avant de lire la partie suivante.

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
electroonn Messages postés 49 Date d'inscription mardi 14 février 2006 Statut Membre Dernière intervention 27 novembre 2007
22 mars 2007 à 16:43
oui c'est une bonne solution ça. mais le probleme c que j'ai changé mon implementation (la fonction qui lit le fichier) pas mal de fois, mais j'arrive tjrs pas a lire tous les types de fichier, juste les fichier .txt.
au debut j'utilisais un tableau de vector de string, et mnt j'utilise un tableau de char dynamique, mais le probleme persiste et je n'ai aucune idee de son origine.
pour exemple, quand j'essaye d'envoyer un fichier.rtf, dans le fichier reçu je trouve les caracteres \tab et \par qui ne doivent normalement pas etre presents.
???
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
22 mars 2007 à 17:29
Bonjour,

Citation :
le but de tout ce que je fais c d'implementer une solution a base d'UDP qui soit fiable.
Pourquoi faire ?

Pourquoi tu ne transforme pas ma source en non connecté ?

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
electroonn Messages postés 49 Date d'inscription mardi 14 février 2006 Statut Membre Dernière intervention 27 novembre 2007
22 mars 2007 à 17:34
ah oui, ça serait une bonne idee ça.. je vais essayer, même si ça n'a pas l'air d'etre evident, c tjrs difficile de reprondre le code de qlq un d'autre... mais me semble que ça vaut la peine.
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
22 mars 2007 à 18:19
Bonjour,

Je poste ma source modifié en non connecté !

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
electroonn Messages postés 49 Date d'inscription mardi 14 février 2006 Statut Membre Dernière intervention 27 novembre 2007
22 mars 2007 à 18:21
oh t'as deja refais la source entre temps, t'es vraiment balaise toi :)
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
22 mars 2007 à 18:29
Bonjour,

Voici l'adresse de la source : http://www.cppfrance.com/code.aspx?ID=41932

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com
0
Rejoignez-nous