Free Tools

Programmez!



Sélection logiciels

1. Google Chrome

2. Maxthon 2.1

3. Windows Media Player 11

4. Paint.NET

5. FireFox 2.0.0.12


En bref

14 Nov 2008 [Évènement] YouTube Live : diffusion en direct du concert YouTube !

08 Nov 2008 Faille WiFi : 15 minutes pour casser une clé WPA

06 Nov 2008 Aidez MySpace à s'enrichir : Piratez !

31 Oct 2008 Ubuntu 8.10 : En téléchargement dès aujourd'hui !

28 Oct 2008 Microsoft Surface : le futur de l'informatique est pour maintenant !

Consulter les archives


Les derniers dossiers


Les ressources Delphi et C/C++

Remplacer un caractère par un autre (compatible Unicode Delphi2009)

Converter - Conversions d'unités de longueur

Variables globales en C

Music Pro Package

Afficher la date et heure du jour


Membres en ligne


Nos partenaires

Espacerezo

KilaSoft


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



Vous êtes ici : AccueilDelphiSources › EXSTREAM, une unité qui simplifie la création et la lecture de flux (fichiers,...)


EXSTREAM, une unité qui simplifie la création et la lecture de flux (fichiers,...)


Informations sur la source :

Auteur : Flo

Catégorie : Manipulation de fichiers

Niveau : Intermédiaire

Posté le : 21 Novembre 2007 à 16h09


Description de la source :

Voici une unité contenant de nouvelles classes pour manipuler les flux.

Alors, au menu :
- TExStream, qui est un "wrapper" de TStream, permet d'ajouter pas mal de fonctions praatiques pour lire et écrire des Byte, Char, Word, Integer, Int64 et chaines. Ecrire et lire un chaine de caractères en une ligne, voila de quoi réconforter certains ! A noter aussi la présence qu'une propriété EOF (End Of File) qui évite le test FStream.Position = FStream.Size.

- TEndianExStream, (descendante deTExStream) qui permet de lire facilement des flux au format BigEndian et LowEndian, sans se préocuper de l'ordres des octets dans les mots. Pratique pour lire des formats comme Tiff qui font la distinction sans se compliquer la vie.

- TBitStream est une classe à part (descend de TObject) qui permet de lire un flux bit par bit. Les trois méthodes sont enfantines et évitent de devoir jongler entre shl, shr, lecture du flux dans un buffer et toutes les joies (!) de la lecture bit-à-bit.

- StrToBits() et BitsToStr(), deux fonctions permettant de convertir une chaine de zéro et de un en Word (et reciproquement)

- SwapBytes(), qui permet d'inverser les octets d'un buffer quelconque (passe de Big à LowEndian et réciproquement)

Bref, vous avez de quoi bien vous amusez avec les flux.


Code Source :

{ Un exemple concret est illustré dans le zip.
Voici cependant les principales fonctions }


{Pour créér le flux }
S := TExStream.Create(TFileStream.Create(FileName, fmCreate));
{ ou alors }
S := TExStream.Create(TMemoryStream.Create));

{Ou en transmettant n'importe quel instance de TStream comme premier param&eagrave;tre ... }

{ Pour écrire dans le flux }
S.WriteInt(42);
S.WriteString(MyStr);
S.WriteWord(MonWord);
{ ou, banalement }
S.WriteBuffer(MonRecord, SizeOf(MonRecord));

{ Pour lire dans le flux }
I := S.ReadInt;
Str := S.ReadString;
MonWord := S.ReadWord;
S.ReadBuffer(MonRecord, SizeOf(MonRecord));

{ Pour TEndianStream, c'est la même chose, il suffit de renseigner la propriété Endian (emBig ou emLittle) et le tour est joué. Le constructeur demande d'ailleurs à quel état l'initialiser }

{ Utilisation de BitStream: création }
S := TBitStream.Create(Stream, fmCreate);

{ Ecrit les 6 premiers bits de W dans le flux }
S.WriteBits(W, 6);

{ Lit les 6 premiers bits du flux et les place dans W }
W := S.ReadBits(6);

{ Une fois l'écriture complètement terminé, ou pour aligner les bits sur un octet, il faut appeler la méthode Flush() }
S.Flush;
S.Free;

Conclusion :

Mais qu'est ce que c'est cette histoire de BigEndian et LittleEndian.
Pour faire simple, c'est la façon dont sont ordonnés les octets dans les structure de plus d'un octet.

Par exemple, pour écrire mille deux cent soixante-douze en chiffes, on à deux choix :
- Soit on écrit le chiffre le plus significatif en premier (celui des milliers), ce qui donne 1272 (il s'agit du mode BigEndian).
- Soit on écrit le chiffre le moins significatif en premier (celui des unités), ce qui donne 2721 (c'est le mode LittleEndian).

Il va de soi que, nous les humais, ayons une forte préférence au premier, plus facile à lire.
Mais les ordinateurs ne sont pas tous d'accord. Windows écrit toujours en LittleEndian par défaut. si on veut écrire en BigEndian, il faudra inverser tous les octets.

Pour plus d'information : http://fr.wikipedia.org/wiki/Endianess

------------------------------------------

Pourquoi avoir descendu TExStream de TObject et non de TStream ?
Tout simplement car cela permet d'utiliser n'importe quel type de flux.

Attention:
- TExStream.WriteString() écrit la taille de la chaine avant.
- TExStream.WriteChars() ne le fait pas.

Donc pour lire une chaine écrite avec WriteString(), il faut impérativement utiliser ReadString(). Pareil pour l'autre cas (logique).


Fichier Source

10 fichiers 16,94 Ko

Liste de contacts/D‚mo.ldc90 Octets
Liste de contacts/ExStream.pas18,06 Ko
Liste de contacts/ListeContacts.dpr241 Octets
Liste de contacts/UContact.pas4,45 Ko
Liste de contacts/UFrmPrinc.dfm3,80 Ko
Liste de contacts/UFrmPrinc.pas3,69 Ko
Demo du TEndianExStream/DemoTEndianExStream.dpr211 Octets
Demo du TEndianExStream/ExStream.pas18,06 Ko
Demo du TEndianExStream/UFrmDemo.dfm6,86 Ko
Demo du TEndianExStream/UFrmDemo.pas5,83 Ko

Télécharger la source