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

Delphi Discussion :

Comment écrire dans un fichier


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut Comment écrire dans un fichier
    Bonjour,

    J'ai cree un record de donnees et je voudrais les stocker dans un fichier. Pour cela il faut que j'ecrive dans le fichier au moyen de WriteFile. Je pense que je vais utiliser CreateFile pour creer un nouveau type de fichier et ensuite ecrire dedant, est ce une bonne idee?

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 089
    Par défaut
    Tu peux utiliser les fonctions Delphi AssignFile, Reset, Read, Write sur un fichier tel que File of TBidule ...

    exemple

    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
     
    type
      TStructRec = packed record
        ID: Integer;
        Nom: String[50];
        Memo: String[255];
        Date: TDateTime;
    end;
     
    procedure TFrmTestFichier.BtnLoadClick(Sender: TObject);
    var
      Fichier: File of TStructRec;
      TmpStructRec: TStructRec;
      i: Integer;
    begin
      if not FileExists(EdPathStructFile.Text) then begin
        ListBoxRecords.Items.Clear();
        ListBoxRecords.Items.Add('New');
        Exit; // Rien à Charger
      end else begin
        ListBoxRecords.Items.Clear();
        ListBoxRecords.Items.Add('New');
     
        AssignFile(Fichier, EdPathStructFile.Text);
        Reset(Fichier); //
        while not Eof(Fichier) do begin
          Read(Fichier, TmpStructRec);
          i := ListBoxRecords.Items.Add(IntToStr(TmpStructRec.ID) + ' : ' + TmpStructRec.Nom);
          ListBoxRecords.Items.Objects[i] := Pointer(TmpStructRec.ID);
        end;
       end;
    end;
     
     
    procedure TFrmTestFichier.BtnEcrireClick(Sender: TObject);
    var
      Fichier: File of TStructRec;
      TmpStructRec: TStructRec;
    begin
      ZeroMemory(@TmpStructRec, SizeOf(TmpStructRec));
      TmpStructRec.ID := StrToInt(EdID.Text);
      TmpStructRec.Nom := EdName.Text;
      TmpStructRec.Memo := EdMemo.Text;
      TmpStructRec.Date := Now();
     
     
      AssignFile(Fichier, EdPathStructFile.Text);
      if not FileExists(EdPathStructFile.Text) then begin
        ReWrite(Fichier);
      end else begin
         Reset(Fichier);
         Seek(Fichier, TmpStructRec.ID); // Magique le BlockSize est SizeOf(TStructRec);
      end;
     
      Write(Fichier, TmpStructRec);
      CloseFile(Fichier);
     
      BtnLoad.Click();
    end;
    ou

    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
    procedure TFrmTestMemory.BtnWriteStringClick(Sender: TObject);
    type
       TStringTest = packed record
          Numero: Cardinal;
          Debut: string[5];
          Milieu: string[6];
          Fin: string[3]
       end;
    var
       FileToWrite: file of TStringTest;
       Item: TStringTest;
    begin
       Item.Debut := 'Begin';
       Item.Milieu := 'Mil';
       Item.Fin := 'End';
     
       AssignFile(FileToWrite, ExtractFilePath(Application.ExeName) + 'Files\' + ExtractFileName(ChangeFileExt(Application.ExeName, '.StringTest.txt')));
       Rewrite(FileToWrite);
       try
          Item.Numero := 1;
          Write(FileToWrite, Item);
          Item.Numero := 2;
          Write(FileToWrite, Item);
          Item.Numero := 3;
          Write(FileToWrite, Item);
     
       finally
          CloseFile(FileToWrite);
       end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    merci. quel est le nom de ton fichier dans ton 2e exemple? et a quoi sert le AssignFile et le rewrite?

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Salut,

    Pour le AssignFile et le Rewrite, tu peux faire F1 sur ces 2 mots clés, Delphi te dira ce que celà fait!

    Sinon, en un mot, AssignFile, c'est pour assigner ton fichier à une variable et le Rewrite permet de créer un fichier et si celui ci existe déjà, il l'écrasera...

    J'espère que ça t'aidera....

  5. #5
    Membre émérite
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Par défaut
    Il y a fondamentalement trois façons de gérer les fichiers dans Delphi :

    1) L'API de Windows; CreateFile, WriteFile etc... peu naturelle au Pascal mais très performante puisque proche du système, et la plus rapide pour convertir une routine C/Windows en Pascal.

    2) Le Pascal "traditionnel". AssignFile ou System.Assign (ancien Assign), Reset, Rewrite, Append, Read(ln), Write(ln), BlockRead, BlockWrite, CloseFile ou System.Close (ancien Close). Beaucoup de vieux programmeurs Pascal conservent cette méthode, comme je l'ai moi-même fait pendant des années. Ce mécanisme permettait de gérer nativement des fichiers structurés, d'éléments de type record, ce qui était l'un des avantages du Pascal à une époque donnée. Mais franchement, en Pascal objet, je trouve cette méthode complètment obsolète. Plutôt que des records, mieux vaut aujourd'hui utiliser des objets capables de se sauvegarder eux-mêmes dans un flux avec une bonne gestion des exceptions (cf ci-après).

    3) Le Pascal objet, par les mécanismes de flux, TFileStream. Ma préférée, parce qu'orientée objet, très performante, permet de gérer les erreurs par le mécanisme des exceptions et accessoirement, permet d'utiliser les mêmes routines pour faire des manipulations sur disque ou en mémoire via l'équivalent "mémoire", TMemoryStream, qui descend comme TFileStream de TStream.

    Selon moi, un vrai programmeur Delphi ne devrait utiliser que cette dernière méthode, avec une robuste gestion des exceptions (try try .. except .. finally). Le code est plus clair, plus évolutif, et plus robuste.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Par défaut
    Bonjour,

    Tapez sur Google .... « Tfilestream Tony Baheux »
    Vous aurez accès à une bonne documentation pour débuter.

    Bon courage.

Discussions similaires

  1. Réponses: 32
    Dernier message: 17/05/2006, 16h03
  2. comment écrire dans un fichier avec Ant-apache
    Par sidi.elmoctar dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 25/04/2006, 17h44
  3. [Delphi] Comment écrire dans un fichier texte ?
    Par Mickey.jet dans le forum Débuter
    Réponses: 2
    Dernier message: 01/04/2006, 14h00
  4. [C#] Comment écrire dans un fichier ?
    Par guillaume16 dans le forum C#
    Réponses: 9
    Dernier message: 30/03/2006, 13h39
  5. [JAR] Comment écrire dans un fichier properties dans un jar
    Par Alec6 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 05/10/2004, 15h16

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