Message d'erreur E/S 32 lors d'un rewrite

Résolu
fiascoco
Messages postés
7
Date d'inscription
mardi 9 janvier 2007
Statut
Membre
Dernière intervention
13 mars 2007
- 12 janv. 2007 à 18:26
Cirec
Messages postés
3832
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
17 février 2022
- 17 nov. 2010 à 23:49
bonjours à tous,
voila j'aimerais ajouter et modifier contenu d'un fichier texte, alors pour cela je recupere tout les info qu'il y a dessus (avec un assignfile(f,'toto.txt'); reset(f); readln(f, contenu); closefile(f);

puis j'efface le fichier et je reecrit tout avec la version modifier:
assignfile(f,'toto.txt'); rewrite(f); writeln(f,'ouaiii'+contenu+'ok');  closefile(f);

truc de base mais qui pourtout m'affiche une erreur E/S 32 en me colorant la ligne où j'ai ecrit le writeln;

j'ai verifié , tout reverifié (voir si il manque un ';' ou erreur bète du meme genre on ne sait jamais), je ne vois pas pourquoi.
Quelqu'un a t'il une solution??

rq: si je reecrit le contenu dans un fichier toto(2).txt  -> plus d'erreur, allez savoir pourquoi. Je sais que il existe d'autre topics de ce type, mais ils m'aident pas plus, sauf qu'il paraiterai que ce soit un probleme que le fichier toto.txt est deja ouvert et donc ca plante.
Mais je ne vois pourquoi pourquoi ce serai ca vus que j'ai bien ecrit closefile(f);

14 réponses

f0xi
Messages postés
4205
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
12 mars 2022
37
13 janv. 2007 à 04:44
utilise les streams si ton fichier est assé gros (> 1Mo), sinon utilise un TStringList (< 1Mo).

de plus n'oublis pas le bloc Try Finally :

AssignFile(F, FileName);
Try
  Reset(F); ou Rewrite(F);
  ....
Finally
  CloseFile(F);
end;

avec les streams c'est assé simple :

var
  TFS : TFileStream;
  S   : String;
  P   : PChar;
begin
  TFS := TFileStream.Create(FileName, fmOpenRead);
  Try
    if TFS.Size <> 0 then begin
       SetLength(S, TFS.Size);
       P := PChar(S);
       TFS.ReadBuffer(P^, TFS.Size);
    end;
  Finally
    TFS.Free;
  end;
  if (Condition) then begin
     TFS := TFileStream.Create(FileName, fmOpenWrite);
     try
       S := 'ouai '+S+' Ok';
       P := PChar(S);
       TFS.WriteBuffer(P^, Length(S));
     finally
       TFS.Free;
     end;
  end;
end;

et avec les StringList c'est encore plus simple :

var
  TSL : TStringList;
  S   : string;
begin
  TSL := TStringList.Create;
  try
    TSL.OpenFromFile(FileName);
    if TSL.Count <> 0 then begin
       S := TSL.Strings[0];
       if (condition) then begin
          TSL.Clear;
          TSL.Add('ouai '+S+' Ok');
          TSL.SaveToFile(FileName);
       end;
    end;
  finally
    TSL.Free;
  end;
end;

3