bonjour,

J'ai besoin de traiter les donnée d'un fichier et de les enregistrer dans un autre fichier.
J'ai fait un exemple simple ci-dessous pour illustrer le probleme .
le TFileStream F est en lecture. Je le lis byte par byte. Et je mets dans F2 les donnés traitées.

Le probleme c'est que ca me génere une erreur. Pourvez vous me dire ce qui colche dans mon code ? Pourquoi il n'accepte deux TFileStream imbriqué ?

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
function OuvrirFichier(Nom : TFileName) : boolean;
var
   F : TFileStream;
   F2 : TFileStream;
   Data : Byte;
   b1:byte;
   i:integer;
begin
    // Ouvre un fichier test
    F := nil;
    F2 := nil;
    try
      // Ouverture d'un flux sur le fichier en lecture. Le fichier reste accessible en lecture seule pour d'autres appli.
      F := TFileStream.Create(Nom, fmOpenRead or fmShareDenyWrite);
      F2 := TFileStream.Create('C:\RES\Out2.txt', fmOpenRead or fmShareDenyWrite);
      F.Position := 0; // Début du flux
      F2.Position := 0; // Début du flux
      i:=0;
      if (pos('.txt',ExtractFileName(Nom))>0) then // Vérification du type du Fichier
      begin
         // Lecture du fichier
         while (F.position < F.Size) do // Tant que la fin du fichier n'est pas atteinte faire :
         begin
               F.ReadBuffer(data, SizeOf(Byte));
               if data=0 then  b1:=1 else b1:=data ; // traitement de la data
               F2.WriteBuffer(b1, SizeOf(byte));      // enregistrement de la data traité
         end;
         Result := true;
      end
      else
      begin
         MessageDlg('Erreur ce n''est pas un fichier test.', mtError, [mbOk], 0);
         Result := false;
      end;
      F.Free;
      F2.Free;
    except
      on EInOutError do
      begin
        Result := False;
        F.Free;
        F2.Free;
        MessageDlg('Erreur d''E-S fichier.', mtError, [mbOk], 0);
      end;
      on EReadError do
      begin
         Result := False;
         F.Free;
         F2.Free;
         MessageDlg('Erreur de lecture sur le fichier.', mtError, [mbOk], 0);
      end;
      else
      begin
         Result := False;
         F.Free;
         F2.Free;
         MessageDlg('Erreur sur le fichier.', mtError, [mbOk], 0);
      end;
    end; // try
end;
Je vous remercie par avance pour toutes pistes

Dereck