tous le monde.

j'ai un probleme avec l'ecriture et la lecture d'un fichier binaire, je cherche à stoquer et à lire une chaine de caractère unicode depuis un fichier binaire, mais j'ai eu toujours l'erreure de perdre le dernier charactère, voici le code, j'espere que vous prenez un peut de temps pour le voir, et le corriger s'il est possible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 
const
  Fichier = 'C:\test.dat';
var
  FFile: File;
 
implementation
 
{$R *.DFM}
function OuvrirFichier(var F: File; NomFich: String): boolean;
begin
  {$I-}
  AssignFile(F, NomFich);
  if FileExists(NomFich) then
    Reset(F, 1)
  else
    Rewrite(F, 1);
  Result := (IOResult = 0);
  if not Result then {$I+} exit;
  Seek(F, 0);
  Result := (IOResult = 0);
  {$I+}
end;
//------------------------------------------------------------------
function FermeFichier(var F: File): boolean;
begin
  {$I-}
  CloseFile(F);
  Result := (IOResult = 0);
  {$I+}
  if not Result then exit;
end;
//------------------------------------------------------------------
function EcrireChaine(S: WideString): boolean;
var
  Longu, nbOct: Integer;
begin
  Result := false;
  if not OuvrirFichier(FFile, Fichier) then exit;
  {$I-}
  Seek(FFile, 0);
  Truncate(FFile);
  if IOResult < 0 then exit;
  Longu := Length(S);
  BlockWrite(FFile, Longu, SizeOf(Longu), nbOct);
  if (IOResult <> 0) or (SizeOf(Longu) <> nbOct) then exit;
  BlockWrite(FFile, S[1], Longu, nbOct);
  if (IOResult <> 0) or (Longu <> nbOct) then exit;
  {$I+}
  Result := FermeFichier(FFile);
end;
//------------------------------------------------------------------
function LireChaine(var S: Widestring): boolean;
var
  Longu,
  nbOct: Integer;
begin
  Result := false;
  if not OuvrirFichier(FFile, Fichier) then exit;
  {$I-}
  Seek(FFile, 0);
  if IOResult <> 0 then exit;
  BlockRead(FFile, Longu, 4, nbOct); //j'ai aissaie de changè le 4 en 8
  if (IOResult <> 0) or (nbOct <> 4) then exit;
  SetLength(S, Longu);
  BlockRead(FFile, S[1], Longu, nbOct);
  if (IOResult <> 0) or (nbOct <> Longu) then exit;
  {$I+}
  Result := FermeFichier(FFile);
end;
et Merci.