IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Fichier existant qui s'efface avec Append


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Fichier existant qui s'efface avec Append
    Bonjour,

    Avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Procedure UpdateFile(const FileName: TFileName; const Rec: TMyFile);
    var
      F : TextFile;
    begin
      {I-}
      AssignFile(F,FileName);
      If FileExists(FileName) then Append(F) else Rewrite(F);
      WriteLn(F,'NANE'+#9+Rec.Name);
    // ..................... une suite de WriteLn
      CloseFile(F);
      {I+}
    end;
    1) le fichier qui existait n'existe plus
    2) en traçant il semble qu'il execute le premier WriteLn puis saute à end sans même passer par la ligne CloseFile()

    Que se passe-t'il ?

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 761
    Points : 13 368
    Points
    13 368
    Par défaut
    En {$I-}, tu devrais tester IOResult.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut
    IOResult est à zéro

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut voici le test pratiqué ioResult
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      {I-}
      AssignFile(F,FileName);
      if ioResult<>0 then ShowMessage('Error I/O');
      If FileExists(FileName) then Append(F) else Rewrite(F);

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 761
    Points : 13 368
    Points
    13 368
    Par défaut
    Il est a 0 quand ?
    Après AssignFile, Append, Rewrite, WriteLn ?

    Je n'utilise presque jamais AssignFile, mais je pense que tu dois tester après chaque opération.

    Edit: ça répond à une partie de la question

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Aucune erreur IO
    Remarque si le fichier n'existe pas il se crée normalement il ne s'efface que s'il existe et j'utilise append

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      {I-}
      AssignFile(F,FileName);
      if IoResult<>0 then ShowMessage('Erreur d''assignation');
      If FileExists(FileName) then Append(F) else Rewrite(F);
      if IoResult<>0 then ShowMessage('Erreur d''ouverture');
      WriteLn(F,'NANE'+#9+Rec.Name);
      if IoResult<>0 then ShowMessage('Erreur d''écriture');

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    J'ai abandonné le textfile, depuis des soucis avec le caractère 14 et 26 (si je me souviens bien) qui provoquait l'arrêt de l'écriture d'une ligne, ce qui tronquait mes logs, depuis, je me traine une fonction, elle est fonctionnelle, peux-tu la tester, si tu as le même problème ça devient inquietant !

    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
    procedure WriteLog(LogName, SectionName, BufferLog: string; AddDate: Boolean = True);
    var
       LogFile: file;
       Dirfile, NameFile, TimeLog: string;
       Buf: string;
    const
       LogPrefixe = 'LOG_';
       LogExt = '.txt';
    begin
       // C:\...\MonProgramme.exe -> C:\...\MonProgramme\log\
       try
          if AddDate then begin
             TimeLog := FormatDateTime('dd/mm/yyyy hh:nn:ss:zzz', Now());
          end;
          Dirfile := GetLocalLogDirectory();
          if not DirectoryExists(Dirfile) then begin
            ForceDirectories(Dirfile);
          end;
          NameFile := Dirfile + LogPrefixe + LogName + LogExt;
          try
             AssignFile(LogFile, NameFile);
             try
                if not FileExists(NameFile) then begin
                   ReWrite(LogFile, 1);
                end else begin
                   Reset(LogFile, 1);
                   Seek(LogFile, FileSize(LogFile));
                end;
                try
                   if AddDate then begin
                      Buf := TimeLog + #9', ' + SectionName + ' :'#9 + BufferLog + #13#10;
                   end else begin
                      Buf := SectionName + ' :'#9 + BufferLog + #13#10;
                   end;
                   // Buf[1] car BlockWrite écrit n octets à partir de la position Buf[1] !
                   BlockWrite(LogFile, Buf[1], Length(Buf));
                except
                   Exit;
                end;
             finally
                CloseFile(LogFile);
             end;
          except
             Exit;
          end;
       except
          Exit;
       end;
    end;

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Ok
    Si je comprend bien ce fichier log ressemble aux fichiers INI
    Je vais essayer mais mon fichier contient des données en tableau c'est moins simple...
    J'essaie et communique mon résultat.
    A+

  9. #9
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par colorid Voir le message
    1) le fichier qui existait n'existe plus
    Peut être que le FileExists ne pointe pas dans le bon répertoire

    Citation Envoyé par colorid Voir le message
    2) en traçant il semble qu'il execute le premier WriteLn puis saute à end sans même passer par la ligne CloseFile()
    ça c'est parce que tu as une erreur d'écriture dans ton fichier, il est censé exister et n'existe déjà plus, ou un truc dans le genre.


    En tout cas, il n'y a pas de raisons, cette partie du code est bonne.
    Citation Envoyé par Fox Mulder
    La vérité est ailleurs !

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Tout est OK
    J'avais poblié le closefile à la derniere lecture

    Encore merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. fichiers bizarres, qui se créent avec sed ?
    Par laloupiote dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 10/02/2012, 07h06
  2. Fichier .exe qui s'ouvre avec Shell, mais ne s'exécute pas
    Par choux22 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 21/12/2010, 15h27
  3. Réponses: 2
    Dernier message: 12/10/2009, 23h00
  4. Réponses: 1
    Dernier message: 06/11/2007, 19h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo