Avec un descendant de TStream, lorsque tu fais un Read(Buffer, Size) la position dans le flux avance de la taille qu'il a pu lire (au maximum de celle donnée Size). Pour connaitre ce que le flux a réellement lu, il suffit de récupérer le retour de la fonction Read(Buffer, Size).
vNbreOctetsLus = vFlux.Read(vBuffer, SizeOf(vBuffer));
Ensuite, pour connaitre la position dans le flux il suffit simplement de lire la propritété Position :
vPositionActuelle := vFlux.Position;
Pour ta demande ca donnerait ceci :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| procedure TForm1.btn2Click(Sender: TObject);
var
vFlux: TStream; // Un flux quelconque
vLong: Integer; // LongInt c'est pareil
vByte: Byte;
begin
// Un flux spécialisé pour un fichier
vFlux := TFileStream.Create('test.dat', fmOpenRead);
try
vFlux.Read(vLong, SizeOf(vLong));
ShowMessage('Valeur lue : '+IntToStr(vLong));
vFlux.Read(vByte, SizeOf(vByte));
ShowMessage('Valeur lue : '+IntToStr(vByte));
vFlux.Read(vByte, SizeOf(vByte));
ShowMessage('Valeur lue : '+IntToStr(vByte));
vFlux.Read(vLong, SizeOf(vLong));
ShowMessage('Valeur lue : '+IntToStr(vLong));
finally
// Quoi qu'il arrive, on libère le flux (et donc le fichier)
vFlux.Free;
end;
end; |
N'oublie pas l'aide de Delphi :
Partager