Aide pour création forcée d'un fichier txt (et écriture)...

scelw Messages postés 117 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 17 février 2007 - 26 déc. 2004 à 22:59
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005 - 27 déc. 2004 à 18:43
De la même façon que pour "forcer" l'affichage d'un printf() ou d'un cout << "texte_à_afficher", il faut utiliser un "flush" (cout << "texte_à_afficher" << flush;), comment force-t-on la création d'un fichier txt et l'écriture dans ce fichier?

Car mon prog utilise une grande boucle principale qui met plusieurs semaines avant d'aboutir. A chaque tour de boucle, un résultat doit être inscrit dans un fichier txt. Malheureusement, ce fichier txt n'est créé et rempli qu'une seule fois à la fin de la boucle (tous les résultats sont alors inscrits d'un coup). C'est très embêtant... Comment y remédier?

Merci!

8 réponses

julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
26 déc. 2004 à 23:38
la fonction _commit flush un fichier sur le disque, je pense que ça devrait t'aller!

>>Info de MSDN:
The _commit function forces the operating system to write the file associated with handle to disk. This call ensures that the specified file is flushed immediately, not at the operating system?s discretion.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/html/_crt__commit.asp
[mailto:julienbj@hotmail.com Savon]
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 déc. 2004 à 23:57
Si tu tournes sur Windows:
WriteFile() avec 0 en dernier param assure la synchro.

ciao...
BruNews, MVP VC++
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
27 déc. 2004 à 00:10
Ca correspond a quoi exactement ces synchro d'ecriture de fichier et ces forcages d'écriture ?
Dans quel cas faire cela ?

Shell
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 déc. 2004 à 00:28
En API:
si tu fournis une struct OVERLAPPED en param de WriteFile et que fichier ouvert avec flag FILE_FLAG_OVERLAPPED, ton code se poursuit sans attendre et tu es prevenu par l'event de la structure de la fin de l'operation d'ecriture.

ciao...
BruNews, MVP VC++
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 déc. 2004 à 01:37
WriteFile() ecrit bien illico si on passe 0 en dernier param et rend la main quand c'est fait.

j'ai du enlevre le dernier post pour cause d'erreur d'indexation, pas de la censure je precise bien, desole.

ciao...
BruNews, MVP VC++
0
cs_Nashua Messages postés 48 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 16 mars 2005
27 déc. 2004 à 07:04
Si tu utilise Unix/Linux:
Ouvres ton fichier avec la fonction open() le flag O_SYNC . En principe l'ecriture synchrone sur le disque est assuree. Il peut cependant y avoir des restrictions. J'ai eu , dans le passe, ce genre de probleme et ne put le resoudre qu'en faisant un close du fichier apres ecriture.

Bien entendu nbe pas utiliser fopen() qui travaille exclusivement en cache et laisse l'OS se charger des IO disque.

Yves
0
scelw Messages postés 117 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 17 février 2007
27 déc. 2004 à 10:42
Merci à tous pour vos idées et infos. Je vais tester tout ça et je vous tiens au courant.

Je travaille sous Windows. Voici ma fonction Ecrire que j'appelle à chaque tour de boucle :

void Ecrire(ZZ p)
{
ofstream Fichier("résultats intermédiaires.doc");
Fichier << p;
Fichier.close;
}

NOTE : j'utilise des nombres de classe ZZ (très grands entiers de plusieurs centaines de milliers de chiffres) et c'est eux que je voudrais inscrire au fur et à mesure dans un fichier, à chaque tour de boucle...

Si vous avez des idées, merci de les illustrer par un exemple concret (une petite ligne de code) car je ne suis pas très expérimenté et je n'ai suivi aucune formation théorique...
Merci! :)
0
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
27 déc. 2004 à 18:43
Pourquoi pas ça ? ofstream dérive de ostream
void Ecrire(const ZZ& p)
{
ofstream Fichier("résultats intermédiaires.doc");
Fichier << p << flush;
// Fichier.close(); // pas obligatoire, le destructeur le ferme.
}
0
Rejoignez-nous