Developpez.com - Delphi
X

Choisissez d'abord la catégorieensuite la rubrique :

Nono40.developpez.com
Le petit coin du web de Nono40
SOURCES TESTS DELPHI WIN32 AUTOMATISMES DELPHI .NET QUICK-REPORT
Retour à l'accueil
77 - FICHIERS TYPÉS AVEC DELPHI 8

PRÉSENTATION : Lecture/écriture des fichiers typés avec Delphi 8.
ZIP : Téléchargez le zip APERÇUS :

NOTES : Voir ici pour une description complète de cette méthode : Utilisation des fichiers typés sous Delphi 8

CODE :
Unit UFileRecord;

Interface

Uses Classes;

Type
  TFileRecord=Class Abstract(TObject)
  Private
    FNom    :String;
    FStream :TFileStream;
    FTaille :Integer;
  Protected
    Property  Stream:TFileStream Read FStream;
    Property  Taille:Integer Read FTaille Write FTaille;
    Procedure ReadShortString(Var Chaine:ShortString;Longueur:Integer);
    Procedure WriteShortString(Const Chaine:ShortString;Longueur:Integer);
  Public
    Constructor Create;
    Destructor Destroy;Override;
    Procedure AssignFile(Const NomFichier:String);
    Procedure Reset;
    Procedure ReWrite;
    Procedure Seek(N:Integer);
    Function  EOF:Boolean;
    Function  FileSize:Integer;
    Procedure CloseFile;
  End;

Implementation

Uses SysUtils;

  { TFileRecord }

Procedure TFileRecord.AssignFile(Const NomFichier: String);
Begin
  FNom:=NomFichier;
End;

Constructor TFileRecord.Create;
Begin
  Inherited Create;
  FStream :=Nil;
  FTaille :=1;
  FNom    :='';
End;

Destructor TFileRecord.Destroy;
Begin
  If Assigned(FStream) Then FStream.Free;
  Inherited;
End;

Function TFileRecord.EOF: Boolean;
Begin
  If Assigned(FStream) Then
    Result:=FStream.Position>=FStream.Size
  Else
    Result:=True;
End;

Function TFileRecord.FileSize: Integer;
Begin
  If Assigned(FStream) Then
    Result:=FStream.Size Div FTaille
  Else
    Result:=0;
End;

Procedure TFileRecord.Reset;
Begin
  If Assigned(FStream)
    Then FreeAndNil(FStream);
  If FNom<>''
    Then FStream:=TFileStream.Create(FNom,fmOpenReadWrite);
End;

Procedure TFileRecord.ReWrite;
Begin
  If Assigned(FStream)
    Then FreeAndNil(FStream);
  If FNom<>''
    Then FStream:=TFileStream.Create(FNom,fmCreate);
End;

Procedure TFileRecord.Seek(N: Integer);
Begin
  If Assigned(FStream) Then
    FStream.Position:=N*FTaille;
End;

Procedure TFileRecord.CloseFile;
Begin
  If Assigned(FStream)
    Then FreeAndNil(FStream);
End;

Procedure TFileRecord.ReadShortString(Var Chaine:ShortString;Longueur:Integer);
Var Buffer:Array Of Byte;
    i:Integer;
Begin
  SetLength(Buffer,Longueur+1);
  FStream.ReadBuffer(Buffer,Longueur+1);
  Chaine:='';
  For i:=1 To Buffer[0Do Chaine := Chaine+AnsiChar(Buffer[i]);
End;

Procedure TFileRecord.WriteShortString(Const Chaine: ShortString;Longueur: Integer);
Var Buffer:Array Of Byte;
    i:Integer;
Begin
  SetLength(Buffer,Longueur+1);
  For i:=0 To Longueur Do Buffer[i]:=Byte(Chaine[i]);
  FStream.WriteBuffer(Buffer,Longueur+1);
End;

end.

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2003 Bruno Guérangé. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Responsables bénévoles de la rubrique Delphi : Gilles Vasseur - Alcatîz -