[C++] Comment optimiser la place des données dans un ofstream?

Comment optimiser la place des données dans un ofstream? [C++] - Programmation

Marsh Posté le 22-02-2002 à 23:16:34    

Alors voilà l'affaire, j'ai besoin de copier un grand nombre de float dans un fichier (plus de 300 000). Le problème c'est que ça fait planter mon programme.
 
Je suis sûr que ça vient du flux avec le fichier, parce que si je remplace l'écriture dans le fichier par une copie de ces données dans des floats il n'y a aucun problème.
 
Si quelqu'un a déjà rencontré ce type de problème, ou si quelqu'un a une idée... Merci.
 
 
Edit: la nouvelle question est comment faire pour utiliser seulement la taille de la variable pour la sauvegarder dans un fichier? Par exemple que la sauvegarde d'un int ne prenne que sizeof(int) comme place.

 

[jfdsdjhfuetppo]--Message édité par Alload--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 22-02-2002 à 23:16:34   

Reply

Marsh Posté le 22-02-2002 à 23:22:49    

Sous linux et win la taille d'un fichier est limitée à 4Go (enfin je crois, sans bidouille particulière)
Donc si t'écris (en ASCII) des centaines de milliers de flottants, tu risques de dépasser cette taille.

Reply

Marsh Posté le 22-02-2002 à 23:29:24    

Comment peut-on faire pour ne pas écrire en ASCII?

Reply

Marsh Posté le 22-02-2002 à 23:32:59    

FAT16/32 : fichier de 2 Go maxi
FAT16 sous NT4 : peut-être 4 Go (vu qu'on peut faire des FAT16 de 4 Go sous NT4)
NTFS : "pas de limite" dans la taille de fichier
Linux : je sais plus quelle était la limite, mais c'était assez haut quand même. Genre 64 Go pour le ext2 ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 22-02-2002 à 23:39:38    

Comment faire pour écrire en utilisant le moins de donnée possible? C'est à dire n'utiliser que la taille d'un float pour écrire un float?

Reply

Marsh Posté le 22-02-2002 à 23:43:57    

Apparemment Ext2fs avait une limite de 2Go qui a été poussée à 4To par la suite.

Reply

Marsh Posté le 23-02-2002 à 00:08:44    

Alload a écrit a écrit :

Comment faire pour écrire en utilisant le moins de donnée possible? C'est à dire n'utiliser que la taille d'un float pour écrire un float?  




Par exemple:
 
float a = 1.2654;
ofstream fout;
fout.open("toto", ofstream::binary);
fout.write((char *)(&a), sizeof(float));
fout.close()

Reply

Marsh Posté le 23-02-2002 à 23:57:28    

DA TRUE CLOUSEAU a écrit a écrit :

Sous linux et win la taille d'un fichier est limitée à 4Go (enfin je crois, sans bidouille particulière)
Donc si t'écris (en ASCII) des centaines de milliers de flottants, tu risques de dépasser cette taille.  




hum si un float a besoin d'un ordre de 20 caracteres,  
pour 300.000 flottants = 6.000.000 caracteres.
Est-ce qu'il faudrait plus de 20 caracteres pour stocker un float(32bits)?
 
Il doit surement y avoir un autre probleme..
(tu as plus de 6 Mo sur ton Disque dur?)
A+
LEGREG

Reply

Marsh Posté le 24-02-2002 à 09:45:14    

Je me doute que le problème venait d'autre part, mais ça m'a permit de chercher la méthode avec les function write et read que vous m'avez conseillé.
 
Donc voilà, c'est déjà un plus. :)
 
Pour le problème, il venait surement du code de mon exportateur 3DSMax... J'en ai marre de ce putain de logiciel qui me donne des trucs imcompréhensibles...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed