Personnellement voir, des Reset dans un Activate et son Close sans un Event ... j'ai un peu de mal ... une fonction de lecture, avec chargement en mémoire pour l'affichage, une fonction d'écriture ... on ne laisse le fichier ouvert tout le temps comme ça (sauf en db mais c'est un serveur robuste qui tourne pas un QuitterClick ...)
ton Chr(13); ne sert à rien ...
Ensuite, si tu utilise un tableau de structure, j'ai fait quelque chose de similaire pour des tests (désolé c'est du code pourri de test, moins clean que du code de prod) ... je load le fichier dans une listbox, puis je veux modifier un item, je le modifie à la volée ... d'ailleurs dommage de ne pas avoir fourni la structure, cela aurait aidé à comprendre ..
1 2 3 4 5 6 7
| type
TStructRec = packed record
ID: Integer;
Nom: string[50];
Memo: string[255];
Date: TDateTime;
end; |
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| procedure TFrmTestFichier.BtnLoadClick(Sender: TObject);
var
Fichier: file of TStructRec;
TmpStructRec: TStructRec;
i: Integer;
begin
if not FileExists(EdPathStructFile.Text) then begin
ListBoxRecords.Items.Clear();
ListBoxRecords.Items.Add('New');
Exit; // Rien à Charger
end else begin
ListBoxRecords.Items.Clear();
ListBoxRecords.Items.Add('New');
AssignFile(Fichier, EdPathStructFile.Text);
Reset(Fichier); //
try
while not Eof(Fichier) do begin
Read(Fichier, TmpStructRec);
i := ListBoxRecords.Items.Add(IntToStr(TmpStructRec.ID) + ' : ' + TmpStructRec.Nom);
ListBoxRecords.Items.Objects[i] := Pointer(TmpStructRec.ID);
end;
finally
CloseFile(Fichier);
end;
end;
end;
procedure TFrmTestFichier.BtnEcrireClick(Sender: TObject);
var
Fichier: file of TStructRec;
TmpStructRec: TStructRec;
begin
ZeroMemory(@TmpStructRec, SizeOf(TmpStructRec));
TmpStructRec.ID := StrToInt(EdID.Text);
TmpStructRec.Nom := EdName.Text;
TmpStructRec.Memo := EdMemo.Text;
TmpStructRec.Date := Now();
AssignFile(Fichier, EdPathStructFile.Text);
if not FileExists(EdPathStructFile.Text) then begin
ReWrite(Fichier);
end else begin
Reset(Fichier);
Seek(Fichier, TmpStructRec.ID); // Magique le BlockSize est SizeOf(TStructRec); mais faudrait peut-être un test de longueur de fichier ...
end;
try
Write(Fichier, TmpStructRec);
finally
CloseFile(Fichier);
end;
BtnLoad.Click();
end; |
Et Comme toi, c'est un fichier binaire, tout à fait normal, ...
donc pour toi je dirais de modifier
Table[NE].EndMark := #13#10; // EndMark étant un String[2];
Partager