|
Publicité | ||||||||||||||||||||||
|
|
#1 | ||
|
Membre actif
![]() Inscription : septembre 2005 Messages : 478 ![]() |
Bonsoir à toutes et à tous,
Avec la procédure Append, il est possible d'ajouter du texte à la fin d'un fichier ... Texte. Cette procédure ne fonctionne pas pour les autres types de fichiers. Or j'ai un fichier composé d'enregistrements (record) et je voudrais y ajouter toutes les X minutes un nouvel enregistrement sans avoir à ré-enregistrer tout le fichier et que cela fonctionne sous Windows et sous Linux. Je n'ai pas trouvé de méthodes pour cela (peut-être mal cherché). En existe-t-il ? J'ai essayé un transtypage : Code :
Merci de votre aide. Pierre Dernière modification par ChPr ; 06/02/2010 à 23h40. |
||
|
|
00
|
|
|
#2 | ||
|
Membre émérite
![]() Inscription : septembre 2009 Messages : 825 ![]() |
TFileStream!
Code :
__________________
[ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ] Ma messagerie n'est pas la succursale du forum... merci! Dernière modification par Dr.Who ; 08/02/2010 à 01h13. |
||
|
|
00
|
|
|
#3 | ||||
|
Membre éclairé
![]() Inscription : janvier 2010 Messages : 192 ![]() |
Methode 1 : Lire tous les enregistrement du fichiers puis ajouter.
Code :
Code :
|
||||
|
|
00
|
|
|
#4 |
|
Membre actif
![]() Inscription : septembre 2005 Messages : 478 ![]() |
Merci pour les solutions que vous m'apportez.
Pour le moment, j'ai choisi d'utiliser "TFileStream". Par contre, il ne faut pas faire : mais : Cordialement. Pierre |
|
|
00
|
|
|
#5 |
|
Membre émérite
![]() Inscription : septembre 2009 Messages : 825 ![]() |
exact
__________________
[ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ] Ma messagerie n'est pas la succursale du forum... merci! |
|
|
00
|
|
|
#6 | ||
|
Membre émérite
![]() Inscription : septembre 2009 Messages : 825 ![]() |
et cerise sur le gateau avec TFileStream :
Code :
__________________
[ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ] Ma messagerie n'est pas la succursale du forum... merci! |
||
|
|
00
|
|
|
#7 | ||
|
Membre éclairé
![]() Inscription : janvier 2010 Messages : 192 ![]() |
Après consultation d'un bouquin la bonne méthode pour ajouter des données à la fin d'un 'file of Type' c'est :
Code :
|
||
|
|
00
|
|
|
#8 |
|
Membre actif
![]() Inscription : septembre 2005 Messages : 478 ![]() |
Merci pour ces compléments d'info.
Cependant, j'ai un problème avec la méthode que préconise "batyann811". Le fichier "original" que je récupère auquel je dois rajouter des valeurs est constitué de N enregistrements de X octets suivi d'un enregistrement de taille différente (Y octets). Avec TFileStream, cela ne me pose pas de problème car "Size" me retourne le nombre d'octets du fichier. Je vais donc à la fin moins Y octets, j'écris mes enregistrements de X octets et je peux y rajouter au final l'enregistrement de Y octets (mais je ne le fais pas car cela ne me sert à rien). Avec Assign(F, 'MonFichier'), "FileSize" me retourne un nombre d'enregistrements de la taille du type de F (soit X octets dans mon cas). Je ne sais pas comment il prend en compte le dernier enregistrement de Y octets. Comme dit plus haut, je ne remets pas l'enregistrement de Y octets à la fin de mes fichiers. Donc, je ne sais pas distinguer à l'ouverture un fichier original d'un fichier que j'ai complété. En tout état de cause, dans mon cas précis, la mise en œuvre de cette dernière méthode est plus compliquée que celle utilisant TFileStream. Mais je garde les deux sous le coude car elles sont intéressantes. Cordialement. Pierre |
|
|
00
|
|
|
#9 |
|
Membre éclairé
![]() Inscription : janvier 2010 Messages : 192 ![]() |
Les fichiers définis pas 'file of TRecord' ne peuvent contenir que des TRecord.
Les TFileStream sont en réalité des flux d'octets on peut donc y lire et écrire des 'objets' de tailles différentes. En contrepartie à chaque lecture ou écriture il faut spécifier la taille de ce que l'on veut lire ou écrire. On peut obtenir le même comportement en utilisant un 'file of byte' et les procédure BlocRead et BlockWrite. |
|
|
00
|
|
|
#10 | ||
|
Membre émérite
![]() Inscription : septembre 2009 Messages : 825 ![]() |
le problème des file of type c'est justement qu'on ne peut mettre QUE des données du type definis ou de taille condordante.
exemple : avec un File of TPoint, on peut lire un TSize, avec un File of TRect on peu lire un TPoint. mais pas l'inverse, lire un TRect dans un file of TPoint risque de poser quelques problèmes en fin de fichier si le nombre de point est impair. le Stream est plus polyvalent, on peut lire/ecrire ce que l'on veux dedans, stream est à peu prés équivalent à un type File (fichier non typé) sans les problèmes qu'il peut engendré. sinon, quand je definit un format brut de donnée, je m'arrange toujours pour stocker quelques infos en début de fichier. signature du fichier, nombre de données, taille de ces derniere, header, footer, table de verification, compréssion, offset etc. ici, tu peux te contenter d'une structure, comme dans l'exemple : [count LongWord][theorical size LongWord][date undefined] ce qui donne : Code :
__________________
[ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ] Ma messagerie n'est pas la succursale du forum... merci! |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com