fichjer en C

fichjer en C - Programmation

Marsh Posté le 21-10-2001 à 21:37:01    

voila, j aimerais utilisé un ficheirs pour stocker des infos, et j ai donc besoin de le segmenter en petites parcelles (8octect, 10octect, 30octect ,255octect....)
certaine parcelle du fichier auront  besoin de pouvoir etre misz a jour !
 
pour remplir les parcelles, il n y a pas de pb, mais pour les mettres a jour ca foire ( avec w ou w+, le fichier est effacé // avec a a+ c est ecrit a la fin -meme si on utilise FSEEK-, et avec r+, ca ecrit au bonne endroit mais j ai l impression que ca fait deborder sur d autre parcelle ( par exemple, j utlise 8 octect pour ecrire un "double", et lorsque je le reecris, il m utilise encore 2 octect apres !!)

Reply

Marsh Posté le 21-10-2001 à 21:37:01   

Reply

Marsh Posté le 21-10-2001 à 22:11:33    

salut,
 
au pif il t'écrirais pas les caractères ascii 13 et 10 ? si oui ça devrait pouvoir se résoudre en ouvrant le fichier en binaire (voir les drapeau disponible pour la fonction), mais comme je te l'ai deja dit je ne maitrise pas vraiment ces fonctions de gestion defichier, j'utilise les autres, donc je ne suis aps sur de mon coup la.

Reply

Marsh Posté le 21-10-2001 à 22:16:30    

ok en fait, c une horrible betise.....
meme si un double prend 8 oct,  en bases 10 il peut aller jusqu a 20 chiffre >> avec fprintf, faut lui liberer 20
octect  
 
.....sinon, Barbarella, j ai essaye le truc ds time.h pour calculer le temps que mettais une page a etre generée,    
 
le seul pb c est qeu ce temps est infereiru a une sec :) donc ca fait tjrs 0

 

[edtdd]--Message édité par slvn--[/edtdd]

Reply

Marsh Posté le 21-10-2001 à 22:56:48    

pour le temps j'ai fait une p"tite fonc
 
unsigned long diftem(struct timeb tps1,struct timeb tps2)
{
 unsigned long val;
 
 val   = (unsigned long) (tps2.time-tps1.time);
 if(tps2.millitm < tps1.millitm)
 {
  val -= 1;
  tps2.millitm += 1000;
 }
 val *= 1000;
 return(val + (unsigned long)(tps2.millitm-tps1.millitm));
}
 
pour l'utiliser tu déclare
 
struct timeb temps1,temps2;
 
 
le démarrage du décompte se fait par  
 
ftime(&temps1);
..... la tu mets un code  
ftime(&temps2);
 
tu termines par  
 
vax = diftem(temps1,temps2);
 
diftem retourne le nombre de millièrme de seconde. la précision est d'environ 5/10 milliseconde .
 
 
Il te faut aussi l'include suivant
 
Windows
#include<\sys\timeb.h>
 
Linux
#include<sys/timeb.h>

Reply

Marsh Posté le 21-10-2001 à 23:00:29    

ok merci :)
je vais tester ca :)

Reply

Marsh Posté le 21-10-2001 à 23:10:47    

ca marche impec :) thx !

Reply

Marsh Posté le 22-10-2001 à 00:10:17    

hehe,
 
:)

Reply

Marsh Posté le 23-10-2001 à 11:12:06    

Heu utilise plutôt fread et fwrite en n'oubliant pas d'ouvrir le fichier en binaire ("rwb" ). Tu passe à ces fonctions l'adresse de ce que tu veut lire ou de là où tu veuw écrire ( par exemple l'adresse de ton double) ainsi que la taille en coctet, pour celà utilise la fonction sizeof.

Reply

Marsh Posté le 23-10-2001 à 11:46:59    

elles ont quoi de mieux ces fonctions ???

Reply

Marsh Posté le 23-10-2001 à 19:05:39    

Elles permettent d'acceder au fichier de façon binaire ce qui correspond plus à ce que tu veux faire je pense

Reply

Marsh Posté le 23-10-2001 à 19:05:39   

Reply

Marsh Posté le 23-10-2001 à 20:10:40    

ouias c vrai, c est ce qu il m aurait fallu :)
enfin, j ai quand meme reussit (semble t il) a resoudre mon pb, donc et en plus le fichier est facilement modifiable puisuqe je l edite en tant que texte

Reply

Sujets relatifs:

Leave a Replay

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