Free Tools

Votre publicité ici ?


Top des logiciels

1. HxD Hex Editor 1.6.1 (328 fois)

2. Open Office 2.2.1 (294 fois)

3. Delphi 6 (253 fois)

4. Windows Live Messenger (175 fois)

5. FireFox 2.0.0.12 (135 fois)


En bref

03 Sept 2008 Google Chrome : le navigateur 100 % Made In Google... ou presque !

28 Août 2008 Internet Explorer 8 : toutes les nouveautés du navigateur

18 Août 2008 Windows 7 : tout savoir sur le prochain système de Microsoft

13 Août 2008 The Pirate Bay censuré en Italie - L'arrêt de mort du réseau P2P ?

11 Août 2008 Hop : le nouveau téléphone jetable à 15€

Consulter les archives


Les derniers dossiers


Les ressources Delphi et C/C++

Music Pro Package

Afficher la date et heure du jour

Fonction affine

Alignement de séquences d'ADN

TatNum : gestion des images avec Qt


Membres en ligne :

Malgon

Mordem


Nos partenaires

Espacerezo

KilaSoft


À votre tour, devenez partenaire de mx-dev.net.



Logo mx-dev.net

Le 1er du Web - Voter pour mx-dev.net


Vous êtes ici : AccueilDelphiTutoriaux › Enregistrer une chaîne dans un TStream ou descendant


Enregistrer une chaîne dans un TStream ou descendant


Informations sur le tutorial :

Auteur : Flo

Catégorie : Manipulation de fichiers

Niveau : Expert

Posté le : 23 Mai 2007 à 15h32


I.Introduction


Plus je lis de codes sources, plus je me rend compte que quasiment personne ne sait réellement écrire une chaîne dans un flux (=stream).

Enfin écrire, ça va à peu près (disons on croit qu'on y arrive), mais pour relire, c'est une autre histoire !

On a le droit à tout : PChar() , buffer de grande taille, et compagnie.

Alors que la solution est si simple:

Il suffit d'écrire la longueur de la chaîne et ensuite d'écrire la chaîne elle-même. Comme ça, pour charger, pas de soucis.

Attention quand même au petit piège dû au ref-counting de Delphi.


II.Code


Pour écrire une chaîne dans un flux (nécessite Classes dans les uses):


  1. procedure WriteString(Fs: TStream; const S: string);
  2. var
  3. L: Integer;
  4. begin
  5. L := Length(S);
  6. Fs.WriteBuffer(L, SizeOf(Integer));
  7. Fs.WriteBuffer(S[1], L);
  8. end;


Avouez que c'est simple.

Le code pour charger serait donc:


  1. function ReadString(Fs: TStream): string;
  2. var
  3. L: Integer;
  4. begin
  5. Fs.ReadBuffer(L, SizeOf(Integer));
  6. SetLength(Result, L);
  7. Fs.ReadBuffer(Result[1], L);
  8. end;

Et c'est simpliste ici aussi.


III.Commentaires


Alors: pourquoi personne n'y arrive ?

J'ai remarqué plusieurs pièges:


IV.Conclusion


Je pense donc qu'écrire une chaîne est simple mais il faut quand même savoir le faire correctement ... surtout si on veut pouvoir la relire !


De même, il est possible de créer une nouvelle classe, nommée par exemple TExFileStream qui contiendrait deux méthodes, respectivement pour lire et écrire une chaîne.

Pour vous éviter ce travail, je l'ai fait à votre place. Ainsi, vous trouverez la classe TExFileStream contenant ces méthodes sur la source EXSTREAM.