electroonn
Messages postés49Date d'inscriptionmardi 14 février 2006StatutMembreDernière intervention27 novembre 2007
-
18 mars 2007 à 19:52
victorcoasne
Messages postés1101Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 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 ??
victorcoasne
Messages postés1101Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 juillet 20237 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";
}
}
electroonn
Messages postés49Date d'inscriptionmardi 14 février 2006StatutMembreDernière intervention27 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.
electroonn
Messages postés49Date d'inscriptionmardi 14 février 2006StatutMembreDernière intervention27 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.
electroonn
Messages postés49Date d'inscriptionmardi 14 février 2006StatutMembreDernière intervention27 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.
victorcoasne
Messages postés1101Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention23 juillet 20237 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.
electroonn
Messages postés49Date d'inscriptionmardi 14 février 2006StatutMembreDernière intervention27 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.
???
electroonn
Messages postés49Date d'inscriptionmardi 14 février 2006StatutMembreDernière intervention27 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.