Aide pour création forcée d'un fichier txt (et écriture)...
scelw
Messages postés117Date d'inscriptionmercredi 3 septembre 2003StatutMembreDernière intervention17 février 2007
-
26 déc. 2004 à 22:59
plus_plus_fab
Messages postés232Date d'inscriptionvendredi 9 janvier 2004StatutMembreDerniè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?
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 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.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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++
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Nashua
Messages postés48Date d'inscriptionlundi 29 novembre 2004StatutMembreDernière intervention16 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.
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! :)
plus_plus_fab
Messages postés232Date d'inscriptionvendredi 9 janvier 2004StatutMembreDerniè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.
}