Bonsoir,
J'ai plusieurs blocs de données (<= 2ko) à écrire dans différents fichiers. En fait il s'agit de données transférées via winsocks. Il n'y a aucun problème en rapport avec les transferts, mais je rencontre un problème lors de la reconstruction des fichiers émis du serveur vers le client, et je pense que ce problème sera rencontré à chaque utilisation de write (même au niveau du serveur donc) si le soucis est en lien avec la taille des flux à écrire.
Aujourd'hui j'ai testé l'écriture de 7 fichiers transférés du serveur vers le client. Pour l'écriture j'utilise write() de ofstream. La taille des fichiers variait de 0 à 171 ko pour mon test. J'ai constaté que plus des données arrivent, moins l'écriture est efficace. En diminuant le nombre de fichiers (3 par exemple dans le cas d'un test ultérieur), je parviens à reconstruire les fichiers qui n'avaient pas été reconstruits lors de précédents tests.
Je m'y prend de la manière suivante :
J'ai lu sur la toile que mon soucis pourrait provenir du fait que les données sont "trop" volumineuses et qu'il faudrait mettre à jour le flux en utilisant flush(). J'ai donc testé l'utilisation de flush() après chaque écriture de bloc et avant d'appeler close(), mais cela n'a rien changé. Je m'inquiète un peu puisque le but est de pouvoir transférer des fichiers bien plus volumineux que ceux utilisés actuellement pour mes tests.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 // J'ai récupéré le nom du fichier dans un char[] ofstream fichierEcriture; fichierEcriture.open(nomFichier, ios::out | ios::binary); /* Je boucle sur la réception des blocs de données. A chaque fois que je reçois un bloc de donnée, je l'écris dans le fichier fichierEcriture : */ fichierEcriture.write(buffer, taille); // Le contenu de buffer est valide ! /* Une fois que la taille du fichier reconstitué est égale à la taille du fichier de même nom présent sur le serveur, je ferme le flux */ fichierEcriture.close();
Qu'en pensez-vous ?
Peut-être saurez vous ce qui ne va pas ?
Je peux mettre le code de mon application mais il n'y a pas plus d'indices que ce que j'ai déjà mis dans les balises code.
Merci par avance.
Partager