(*
function InsertInStream(
buffer: Pointer; Pointeur sur les données à ajouter
aOffset, Position de l'ajout dans le stream si aOffset est > Size les données sont ajoutées
à la fin du Stream
BufferSize: Int64; Taille des données à ajouter
const aStream: TMemoryStream Le Stream à modifier
): Boolean;
*)
Function InsertInStream(buffer: Pointer; aOffset, BufferSize: Int64;
Const aStream: TMemoryStream): Boolean;
Var CurrentSize: Int64;
Begin
Result := Assigned(aStream);
If Result Then
With aStream Do
Try
CurrentSize := Size;
SetSize(Size + BufferSize);
If aOffset < CurrentSize Then
Move(Pointer(Integer(Memory)+aOffset)^, Pointer(Integer(Memory)+aOffset+BufferSize)^, Size-BufferSize+aOffset)
Else
aOffset := CurrentSize;
Move(buffer^, Pointer(Integer(Memory)+aOffset)^, BufferSize);
Except
Result := False;
End;
End;
Remarque :
// Exemple sur Fichier texte
procedure TFrm_Main.Button3Click(Sender: TObject);
var MS: TMemoryStream;
strAjout: string;
aLen: Integer;
begin
strAjout := 'Ligne ajoutée le, à:'+DateTimeToStr(Now)+#13#10;
aLen := Length(strAjout);
MS := TMemoryStream.Create;
with MS do
try
if FileExists('TextTest.dat') then
LoadFromFile('TextTest.dat');
// Ajout en début de fichier
if InsertInStream(@strAjout[1], 0, aLen, MS) then
Memo1.Lines.LoadFromStream(MS)
else
ShowMessage('Echec de la modification !!!!');
finally
SaveToFile('TextTest.dat');
Free;
end;
end;
// Exemple sur fichier binaire séquentiel
type
TNameRec = packed record
Nom: string[15];
Prenom: string[10];
BDay: TDate;
end;
procedure TFrm_Main.Button4Click(Sender: TObject);
var FS : TMemoryStream;
aNameRec: TNameRec;
begin
aNameRec.Nom := 'Caribensila';
aNameRec.Prenom := 'Francky';
aNameRec.BDay := Now;
FS := TMemoryStream.Create;
try
if FileExists('TestRecord.dat') then
FS.LoadFromFile('TestRecord.dat');
// ajoute les données à la 3ème position
if InsertInStream(@aNameRec, 2*SizeOf(TNameRec), SizeOf(TNameRec), FS) then
ShowMessage('Modification réussit ^^')
else
ShowMessage('Echec de la modification !!!!')
finally
FS.SaveToFile('TestRecord.dat');
end;
end;