Pour lire ou écrire une chaine dans un flux ne vous fiez pas à ma source. Allez lire les commentaires ils sont plus pertinents, merci.
Source / Exemple :
{*******************************************************************************
Auteur : j1mb0
Date : juin 2003
Contact :
Description : - Permettre l'écriture et la lecture de chaîne dynamique
à l'intérieur d'un flux (ex.: un fichier).
- Implémente une classe dérivant de TFileStream incluant
les fonctions.
Commentaire : Sert pas à grand chose je l'avoue HaHaHa ;-)
unit FileUtils;
interface
uses
classes;
function ReadData(const F : TStream; var Data; Len : Integer) : Boolean;
function WriteData(const F : TStream; const Data; Len : Integer) : Boolean;
function ReadString(const F : TStream; var Str : String;
Len : Integer) : Boolean;
function ReadString2(const F : TStream; var Str : String) : Boolean;
function WriteString(const F : TStream; const Str : String) : Boolean;
function WriteString2(const F : TStream; const Str : String) : Boolean;
type
TFileXStream = class(TFileStream)
public
function ReadData(var Data; Len : Integer) : Boolean;
function WriteData(const Data; Len : Integer) : Boolean;
function ReadString(var Str : String; Len : Integer) : Boolean;
function ReadString2(var Str : String) : Boolean;
function WriteString(const Str : String) : Boolean;
function WriteString2(const Str : String) : Boolean;
end;
implementation
{*******************************************************************************
Classe : TFileXStream
Description : Dérive de TFileStream et implémente des fonctions de
lecture/écriture de chaîne dynamique dans des fichiers.
Commentaire :
function TFileXStream.ReadData(var Data; Len : Integer) : Boolean;
{*******************************************************************************
Description : Lire des données à l'intérieur d'un fichier.
Commentaire :
Paramètres : - Data / Export / Données lues
- Len / Import / Nombre d'octets à lire
Valeur de retour : La lecture s'est bien déroulée ou non.
begin
Result := FileUtils.ReadData(self, Data, Len);
end;
function TFileXStream.WriteData(const Data; Len : Integer) : Boolean;
{*******************************************************************************
Description : Écrire des données à l'intérieur d'un fichier.
Commentaire :
Paramètres : - Data / Import / Données à écrire
- Len / Import / Nombre d'octets à lire
Valeur de retour : L'écriture s'est bien déroulée ou non.
begin
Result := FileUtils.WriteData(self, Data, Len);
end;
function TFileXStream.ReadString(var Str : String; Len : Integer) : Boolean;
{*******************************************************************************
Description : Lire une chaîne de caractère à l'intérieur d'un fichier.
Commentaire : La longueur de la chaîne est spécifiée en paramètre
et non dans le fichier.
Paramètres : - Str / Export / Chaîne lue
- Len / Import / Longueur de la chaîne à lire
Valeur de retour : La lecture s'est bien déroulée ou non.
begin
Result := FileUtils.ReadString(self, Str, Len);
end;
function TFileXStream.ReadString2(var Str : String) : Boolean;
{*******************************************************************************
Description : Lire une chaîne de caractère à l'intérieur d'un fichier.
Commentaire : La longueur de la chaîne doit précédée la chaîne à
l'intérieur du fichier.
Paramètres : - Str / Export / Chaîne lue
Valeur de retour : La lecture s'est bien déroulée ou non.
begin
Result := FileUtils.ReadString2(self, Str);
end;
function TFileXStream.WriteString(const Str : String) : Boolean;
{*******************************************************************************
Description : Écrire une chaîne de caractère à l'intérieur d'un fichier.
Commentaire : La longueur de la chaîne n'est PAS écrite dans le fichier.
Paramètres : - Str / Import / Chaîne à écrire
Valeur de retour : L'écriture s'est bien déroulée ou non.
begin
Result := FileUtils.WriteString(self, Str);
end;
function TFileXStream.WriteString2(const Str : String) : Boolean;
{*******************************************************************************
Description : Écrire une chaîne de caractère à l'intérieur d'un fichier.
Commentaire : La longueur de la chaîne EST écrite dans le fichier.
Paramètres : - Str / Import / Chaîne à écrire
Valeur de retour : L'écriture s'est bien déroulée ou non.
begin
Result := FileUtils.WriteString2(self, Str);
end;
{*******************************************************************************
Description : Fonctions diverses...
Commentaire :
function ReadData(const F : TStream; var Data; Len : Integer) : Boolean;
{*******************************************************************************
Description : Lire des données dans un flux.
Commentaire :
Paramètres : - F / Import / Flux de données
- Data / Export / Données lues
- Len / Import / Nombre d'octets à lire
Valeur de retour : La lecture s'est bien déroulée ou non.
begin
Result := F.Read(Data, Len) = Len;
end;
function WriteData(const F : TStream; const Data; Len : Integer) : Boolean;
{*******************************************************************************
Description : Écrire des données dans un flux.
Commentaire :
Paramètres : - F / Import / Flux de données
- Data / Import / Données à écrire
- Len / Import / Nombre d'octets à écrire
Valeur de retour : L'écriture s'est bien déroulée ou non.
begin
Result := F.Write(Data, Len) = Len;
end;
function ReadString(const F : TStream; var Str : String; Len : Integer) : Boolean;
{*******************************************************************************
Description : Lire une chaîne de caractère dynamique dans un flux.
Commentaire : La longueur de la chaîne n'est PAS spécifiée dans le flux.
Paramètres : - F / Import / Flux de données
- Str / Export / Chaîne lue
- Len / Import / Longueur de la chaîne
Valeur de retour : La lecture s'est bien déroulée ou non.
var
Tmp : array[1..255] of char; {Tampon.}
begin
{Initialiser le tampon pour qu'il soit tout propre.}
FillChar(Tmp, sizeof(Tmp), 0);
{Lire les données dans le flux et vérifier si le nombre d'octets lues
est celui attendu.}
Result := F.Read(Tmp, Len) = Len;
{Vérifier si la lecture a réussie.}
if Result then
begin
{Exporter la chaîne obtenue.}
Str := Tmp;
{Fixer la longueur de la chaîne.}
SetLength(Str, Len);
end;
end;
function ReadString2(const F : TStream; var Str : String) : Boolean;
{*******************************************************************************
Description : Lire une chaîne de caractère dynamique dans un flux.
Commentaire : La longueur de la chaîne DOIT être spécifiée dans le flux.
Paramètres : - F / Import / Flux de données
- Str / Export / Chaîne lue
Valeur de retour : La lecture s'est bien déroulée ou non.
var
Tmp : array[1..255] of char; {Tampon.}
Len : Byte; {Longueur de la chaîne.}
begin
{Initialiser le tampon pour qu'il soit tout propre.}
FillChar(Tmp, sizeof(Tmp), 0);
{Lire la taille de la chaîne dans le flux et vérifier si le
nombre d'octets lues est celui attendu.}
Result := F.Read(Len, sizeof(Byte)) = sizeof(Byte);
{Vérifier si la lecture a réussie.}
if Result then
begin
{Lire la chaîne dans le flux...}
Result := F.Read(Tmp, Len) = Len;
{Vérifier si la lecture a réussie.}
if Result then
begin
{Exporter la chaîne obtenues et fixer sa longueur avec
celle lue dans le flux.}
Str := Tmp;
SetLength(Str, Len);
end;
end;
end;
function WriteString(const F : TStream; const Str : String) : Boolean;
{*******************************************************************************
Description : Écrire une chaîne de caractère dynamique dans un flux.
Commentaire : La longueur de la chaîne n'est PAS écrite dans le flux.
Paramètres : - F / Import / Flux de données
- Str / Import / Chaîne à écrire
Valeur de retour : L'écriture s'est bien déroulée ou non.
var
Tmp : array[1..255] of char; {Tampon.}
i : Integer; {Indice parcourant les caractère de la chaîne.}
begin
{Transférer les caractères de la chaîne à l'intérieur du tampon.}
for i := 1 to Length(Str) do
Tmp[i] := Str[i];
{Écrire le tampon dans le flux et vérifier si le nombre d'octet
écrits est celui attendu.}
Result := F.Write(Tmp, Length(Str)) = Length(Str);
end;
function WriteString2(const F : TStream; const Str : String) : Boolean;
{*******************************************************************************
Description : Écrire une chaîne de caractère dynamique dans un flux.
Commentaire : La longueur de la chaîne EST écrite dans le flux.
Paramètres : - F / Import / Flux de données
- Str / Import / Chaîne à écrire
Valeur de retour : L'écriture s'est bien déroulée ou non.
var
Tmp : array[0..255] of char; {Tampon.}
i : Integer; {Indice parcourant les caractère de la chaîne.}
begin
{Mettre la longueur de la chaîne dans l'élément 0 du tampon.}
Tmp[0] := Chr(Length(Str));
{Transférer les caractères de la chaîne à l'intérieur du tampon.}
for i := 1 to Length(Str) do
Tmp[i] := Str[i];
{Écrire le tampon dans le flux et vérifier si le nombre d'octet
écrits est celui attendu.}
Result := F.Write(Tmp, Length(Str)+1) = Length(Str)+1;
end;
end.
Conclusion :
Lire les commentaires ci-dessous. Ils sont beaucoup plus pertinents que ma source.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.