Hello,
Au lieu de faire:
File open
File write
File write
File write
File close
y a ti plus performant et plus rapide ? (passer par un object intermediaire ) buffer, stream ?
Hello,
Au lieu de faire:
File open
File write
File write
File write
File close
y a ti plus performant et plus rapide ? (passer par un object intermediaire ) buffer, stream ?
Moi en C++ pour faire des écritures lectures de fichier,j'utilise les ofsteram,Envoyé par ZaaN
un exemple de code :
un lien pour avoir les differents modes d'ouverture :http://www.cplusplus.com/reference/i...ream/open.html
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ofstream file; file.open("fichier.txt", ios::out | ios::app); file << "Ecriture ....." <<endl; file.close();
J'espére que j'ai répondu à ta question![]()
c'est aussi ce que j ai decris et utilisé mais sans le preciser...
la methode write est elle plus lente que l'operateur << sur les ofstream ?
je croyais que tu voulais effectué une ouverture , écriture et fermeture de fichier avec un minimum de ligne de code .Envoyé par ZaaN
Question rapidité je peu rien te dire -_-.
Une idée , independante de la méthode que tu va utiliser pour ta gestion de fichiers si t'a plein de fichiers à traiter en méme temps, est d'utiliser le multithreading comme ca tu pourra lancer plein de traitements en paralléles et l'execution de ton code sera plus rapide.
a priori, l utilisation de << dans iostream n'apportera pas grand chose (ni ne retirera) a une lecture plus standard. A un moment ou un autre, << implique une lecture de toute facon...
En revanche, la ou tu peux peut etre joue, c'est sur les appels de lecture ...
FILE * f = fopen(...);
int f = open(...);
Il s agit de deux API "distinctes". La premiere utilise un tampon interne pour eviter de multiples petites lectures / ecrtiture (consommatrices en temps) . La seconde lit exactement les octets qu on lui demande, rien de plus donc :
Pour "optimiser" un acces disque mieux vaut ton lire d'un coup (si c est possible bien sur), car on evite la mutliplication des appels systemes (bloquant) et donc les context switching (couteux)
En cas d 'appels lecture/ecriture multiples , il faut mieux bufferiser tout ca et donc utiliser l'aPI (fread / fwrite) (en fait mieux vaut TOUJOURS l utiliser)
salut,
Personnellement, je ferais meme plutot un truc du genre deEnvoyé par stranger
En effet, le flux (ici le fichier) est d'office ouvert si le constructeur dispose des informations qui lui sont nécessaires...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ofstream file("fichier.txt",ios::app); if(!file.is_open()) throw runtime_error("acces en ecriture au fichier impossible"); file<< "ecriture..."<<endl;
La levée d'une exception est mis "pour mémoire" (pas *forcément* obligatoire, et à gérer ailleurs) et a pour but de pallier une éventuelle inaccessiblité du fichier (bloqué par une autre application
)
Le fichier étant d'office fermé lorsque la fonction est quittée du fait que le flux est détruit à la fin de la fonction, il n'est pas non plus nécessaire de le fermer explicitement
Ceci dit, pour répondre à la question originelle, il est clair qu'il est préférable, d'un stricte point de vue des performances, d' ouvrir le fichier une seule fois et d'y "balancer" l'ensemble des données à écrire dedans, plutot que de l'ouvrir une multitude de fois pour n'y écrire que quelques mots
L'utilisation des *fstream permet, en outre, de travailler de manière plus sécurisante que le FILE* et son florilege de fonctions associées, mais ne modifie en rien les temps d'acces et de lecture![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Merci koala pour tes explications tu m'a apporté plein d'info. que je ne savais pas (ou que j'ai oublier de traiter comme les exceptions que je vais de suite gérer dans un frame work que je developpe en ce moment)
Partager