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!
A voir également:
Programme créer fichier txt pour virement ccp standard
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.
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.
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.
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! :)
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.
}