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 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 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 34
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
Rejoignez-nous