Delphipage - la reference en Delphi
Accueil - Astuces - Composants - Programmes - Tutoriaux - Livres - Liens
 Sources
- Astuces
- Composants
- Programmes
- Tutoriaux
 Rechercher
- Delphipage
- Ngscan
 Ressources
- Lexique Delphi
- Livres
- News
- Patchs Delphi
 Liens
- Borland France
- CodeGear
- Les meilleurs sites


Tutoriaux - Les flux

Présentation 

Les flux sont des objets permettant de traiter un ensemble de données appelé plus généralemnt flots de données. Dans Delphi, La classe de base qui permet de gèrer les flux est TStream. Cette classe ne sera jamais utilisée directement. Par contre, vous trouverez de nombreux autres classes descendant de TStream que vous pourrez utiliser dont notamment TMemoryStream (gère des données en mémoire vive) et TFileStream (gère des fichiers).

Lorsque vous avez à traiter des données d'une taille importante, il est nécessaire d'utiliser les flux. Par exemple, lorsque vous voulez traiter un fichier de taille importants (ayant beaucoup de données), il est beaucoup plus rapide d'utiliser les flux qu'avec la méthode des "FILE OF".

Dans ce tutorial, nous verrons pour commencer la classe de base TStream et puis nous passerons aux deux classes TMemoryStream et TFileStream.


La classe de base TStream

Comme nous l'avons vu précèdemment, TStream est la classe de base des objest flux.
Nous allons nous intéresser maintenant aux méthodes ainsi qu'aux propriétés de cette classe que nous retrouverons pour les classes descendantes.

Méthodes

Ce tableau récapitule les principales méthodes de la classe TStream.

Nom
Description
Create
Crée le fux.
CopyFrom
Copie un flux vers un autre flux.
Free
Libère le flux.
Read
Lecture du flux.
Seek
Déplace du flux.
SetSize
Change la taille de la ressource de flux
Write
Ecrit dans le flux.

Propriétés

Nom
Description
Position
Indique la position en cours dans le flux utilisée pour la lecture et l'écriture.
Size
Indique la taille, exprimée en octets, du flux.

Pour illustrer l'utilisation de ses méthodes et propriétés, nous allons réaliser deux exemples qui utilisent les flux de mémoire et les fichiers flux.


Flux mémoire

La classe TMemoryStream est un flux mémoire. Cela signifie que les données sont stockés en mémoire vive.
Comme exemple d'utilisation, nous allons transférer des données d'un composant TMemo à un deuxième composant TMemo.

Créer un nouveau projet Delphi.
Ajoutez deux composant TGoupBox, deux TMemo et un composant TButton.



On crée un fichier flux puis on enregistre les données (le texte du memo) dans la mémoire. Ensuite, on déplace les flux grâce à la méthode "Seek" et on charge le flux dans le deuxième composant TMemo.

procedure TForm1.Button1Click(Sender: TObject);
var MemFlux:TMemoryStream;
begin
MemFlux:=TMemoryStream.Create; //Crée une instance TMemoryStream
try
Memo1.Lines.SaveToStream(MemFlux); //Enregistre les données dans la mémoire
MemFlux.Seek(soFromBeginning,0); //Déplace les flux ,"soFromBeginning" décale à partir du début de la mémoire
Memo2.Lines.LoadFromStream(MemFlux); //Charge les données dans la mémoire
finally
MemFlux.Free; //Libère le flux
end;
end;

Transférer de données    [ 30-12-2003 ]
 Exemple d'utilisation de la classe TMemoryStream.
Télécharger :  [6 Ko] [Télécharger tmemorystream.zip]

Auteur : Yoann
Site internet :
http://delphipage.free.fr/
 


Fichier flux

La classe TFileStream permet de lire et d'écrire dans un fichier.
Comme exemple d'utilisation, nous allons réaliser une copie de fichier.

Créez un nouveau projet Delphi.
Ajoutez deux composants TGoupBox, deux TLabel, deux TEdit et un composant TButton.



Pour copier le fichier, nous allons dans un premier temps créer une procedure que l'on appellera "Copier" ayant comme paramètre le fichier source et le fichier de destination.

procedure Copier(fichiersource,fichierdestination:string);
var FichierFlux,FFlux:TFileStream;
begin
Screen.Cursor:=crHourGlass; //Affiche le curseur sablier
FichierFlux:=TFileStream.Create(fichiersource,fmOpenRead); //Crée une instance de TFileStream, "fmOpenRead" permet d'ouvrir le fichier en lecture seule
FFlux:=TFileStream.Create(fichierdestination,fmOpenWrite or fmCreate); //"fmOpenWrite" ouvre le fichier en écriture seulement (remplace le contenu), "fmCreate" permet de créer le fichier si il n'existe pas
try
FFlux.CopyFrom(FichierFlux,FichierFlux.Size); //Copie le fux "FichierFlux" vers un autre flux "FFlux"
finally
FichierFlux.Free; //Libère le flux
FFlux.Free;
Screen.Cursor:=crDefault; //Affiche le curseur par défaut
end;
end;

Pour commencer, on crée deux fichiers flux (fichier source et destination) avec la méthode "Create". Puis on utilise la méthode "CopyFrom" pour copier un fluxde données (source) vers un autre flux (destination). "FichierFlux.Size" spécifie le nombre
d'octect copié. La méthode déplace ensuite la position en cours de Count octets et renvoie le nombre d'octets copiés.

Pour finir, il ne reste plus qu'à appeler cette procédure lorsque l'utilisateur cliquera sur le bouton.

procedure TForm1.Button1Click(Sender: TObject);
begin
Copier(Edit1.Text,Edit2.Text); //Fait une copie de fichier
end;

Copier un fichier    [ 30-12-2003 ]
 Exemple d'utilisation de la classe TFileStream.
Télécharger :  [6 Ko] [Télécharger tfilestream.zip]

Auteur : Yoann
Site internet :
http://delphipage.free.fr/
 


Un peu plus loin...

Il existe de nombreuses autres classes descendant de TStream.
Ce tableau dresse une présentation des principales autres classes.

Classe
Description
TBlobStream
Lit et écrit dans des objets champ représentant des objets binaires volumineux (BLOB).
TOleStream
Lit et écrit des informations dans une interface de flux fournie par un objet OLE.
TStringStream
Accès à des informations stockées dans une chaîne longue.
TWinSocketStream
Lit et écrit dans des connexions de socket .

Pour de plus amples informations sur ses classes, veuillez vous référer à l'aide Delphi.

Tous droits réservés - Contacts
Haut de la page