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 :

enregistrer deux fichier dans un seul fichier


Sujet :

Langage Delphi

  1. #1
    Membre éclairé Avatar de Bourak
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 231
    Par défaut enregistrer deux fichier dans un seul fichier
    Salut

    Est_ce que c'est possible d'enregistrer deux fichier dans un seul fichier sous delphi.

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    la réponse simple: oui.

    mais bon.... faut quand même savoir de quel fichier on parle, si c'est du binaire, du xml, du texte brut, .... il faut que tu aie un moyen d'identifier la séparation entre les fichiers, lors de la relecture...

  3. #3
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    oui ca me parait possible mais faudrait être plus précis
    Concatener 2 fichiers ? fichier Texte ?

    Il faut ouvrir les 2 fichiers en lecture et 1 en écriture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      AssignFile( F1, Fichier1 )
      AssignFile( F2, fichier2 )
      AssignFile( F1F2, fichier3 )
      Reset( F1 )
      Reset( F2 )
      ReWrite( F1F2 )
    Lecture des fichiers et écriture dans le 3eme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var S1, S2: string;
     
      while ( not Eof( F1 ) ) and ( not Eof( F2 ) ) do
        begin
        ReadLn( F1, S1 );
        ReadLn( F2, S2 );
        WriteLn( F1F2, S1 );
        WriteLN( F1F2, S2 );
        end;
      // écrire le reste du fichier F1 ou F2
      ...
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  4. #4
    Membre éclairé Avatar de Bourak
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 231
    Par défaut Enregistrer 2 fichier dans un seul fichier
    Salut!

    Merci pour votre attention!

    J'ai utilisé dans mon programme 2 composant SimpleGraph l'un pour dessiner en recto et l'autre pour le verso. Le problème que je n'arrive pas a sauvgarder les deux composant dans un seul fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SimpleGraph1.SaveToFile(SaveDialog.FileName);
              SimpleGraph2.SaveToFile(SaveDialog.FileName);
    donc comme vous voyer il y'a un seul FileName et 2 simplegraph.
    Merci d'avance.

  5. #5
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Ce que tu veux faire n'est pas possible, ou alors c bcp plus compliqué que ce que tu crois!
    SimpleGraph1.SaveToFile va sauver ton dessin simplement dans un fichier et point barre. Si tu refais un SaveToFile, cela va écraser ton ancien fichier...

    Je ne sais pas quel type tu utilises, mais a priori, c'est comme ca que je le vois
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    utilise un composant de backup comme TBackupFile (sorte de composant qui crée des fichier style zip..) Comme ça tu pourras sauvegarrder ce que tu veux dans le même fichier.

    TBackupFile se trouve ici : http://www.torry.net/quicksearchd.ph...ckup&Title=Yes

    Contrairement à ce qui est dit, ça marche avec TOUT les delphi Win32 (je l'utilise sous Delphi7).

    Le fichier d'aide qui l'accompagne est hyper bien fait.
    Bon code !

  7. #7
    Membre éclairé Avatar de Bourak
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 231
    Par défaut enregistrer deux fichier dans un seul fichier
    Bonjour mes frères!

    Merci pour tous vous réponses!

    Explique moi comment je peut utilisé TBackupFile.

  8. #8
    Membre chevronné
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Par défaut
    A ta place, je passerais par des TFileStream et TMemoryStream, tu enregistres tes graphs dans des TMemoryStream à l'aide de la méthode saveToStream(), ensuite tu crées un fichier en utilisant un TFileStream et tu enregistres tes fluxs l'un derrière l'autre tout en prennant soin de délimiter les fichiers. Pour la lecture, tu effectue l'opération inverse.

  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 : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut Re: enregistrer deux fichier dans un seul fichier
    Citation Envoyé par Bourak
    Bonjour mes frères!

    Merci pour tous vous réponses!

    Explique moi comment je peut utilisé TBackupFile.
    En fait, TBackupFile est un composant que te permet de créer des sortes de fichiers ZIP, mais dans un format propriétaire qui n'est pas du ZIP.

    Là sur ce point, il y a des avantages et des inconvénients :
    - Les inconvénients : c'est que tu ne pourras pas ouvrir et visualiser tes fichiers avec un logiciels comme Winzip. Si tu veux cette fonctionnalité là pour toi ou tes utilisateurs, il faudra que tu crée ton propre logiciel à partir du composant (c'est pas très compliqué à faire). Celà dit, les créateur du composant ont fait un logiciel qui sait le faire et ont fourni le code source avec le composant. Donc tu vois, il y a une démo en plus...
    - Les avantages : le composant et GRATUIT, avec code source et tout et tout. Et sinon, tes utilisateurs ne pourront pas confondre avec un fichier zip ou un fichier rar (c'est toi qui choisi l'extension).

    Donc, comme je viens de le dire, les fichiers que tu crée avec ce composant ne sont ni plus ni moins tout comme des fichiers zippés. Tu prends deux fichiers, voir 50000 si ça te chantes et hop, tu n'en fait qu'un !
    Dans l'autre sens le composant te permet d'extraire les fichiers de ton archive (heureusement).

    La façon dont tu dois t'y prendre pour utiliser le composant est extrèmement bien expliquée dans le fichier d'aide qui accompagne le composant, avec tout plein d'exemples et tout et tout. Franchement je ne ferais pas mieux ici.
    Les deux methodes principales du composant sont Backup et Restore.
    Pour rajouter la Liste Des Fichiers dans une archive, et pouvoir la consulter ensuite avant d'extraire une archive, tu as :
    SaveFileID:=True; avant de Sauvegarder et GetArchiveTitle avant d'extraire.

    Un seul point faible, mais contournable est le suivant :
    Quand tu souhaites juste ajouter un fichier à une archive qui contient déjà des fichiers, le composant ne sait pas faire. Je m'explique : imaginons que tu ais une archive qui s'appelle Archive.truc dans laquelle tu as deux fichiers. Maintenant tu souhaite ajouter un fichier supplémentaire à l'archive, hé bien tu ne peux pas : le composant ne sait que écraser ton ancienne archive complêtement avec ton nouveau fichier et tu perds les ancien. La solution : d'abord tu dézippe ton archive dans un répertoire temporaire, puis tu recrées ton archive avec les deux fichiers que tu viens d'extraire puis le nouveau.

    Si je souhaite rajouter des information particulières sur l'archive elle même, hop un petit fichier ini ou texte supplémentaire.

    Donc pour ton truc, le code que j'utiliserais avec TBackupFile par exemple c'est :

    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
    const RepertoireTemp='c:\temp\';
    Var AStringList:TStringList;
    begin
      if SaveDialog.execute then
      begin
         //sauvegarde des graphs dans un répertoire temporaire
         simpleGrah1.SaveToFile(RepertoireTemp+'Recto.graph');
         simpleGrah1.SaveToFile(RepertoireTemp+'Verso.graph');
     
         //Creation de la Liste de Fichier pour creer l'archive
         AStringList:=TStringList.create;
         try
            AstringList.Add(RepertoireTemp+'Recto.graph');
            AstringList.Add(RepertoireTemp+'Verso.graph');
     
            //Création de l'archive
            BackupFile1.BackUp(AstringList,SaveDialog.Filename);
         finally
            //Libérer le StringList
            AStringLiszt.Free;
         end;
      end;
    end;
    Pour récupérer mes graphes, voici ce que je ferais dans ton cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    const RepertoireTemp='c:\temp\';
    begin
      if OpenDialog.execute then
      begin
         //Extraction des graphes dans un répertoire temporaire
         BackupFile1.Restore(OpenDialog.Filename,RepertoireTemp);
     
         //Récupération des Graphes dans mon programme
         simpleGrah1.LoadFromFile(RepertoireTemp+'Recto.graph');
         simpleGrah1.LoadFromFile(RepertoireTemp+'Verso.graph');
      end;
    end;
    c'est pas compliqué hein ?

    Si je souhaite inclure en plus la ListedesFichier.txt voici le code à peine modifié :
    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
    const RepertoireTemp='c:\temp\';
    Var AStringList:TStringList;
    begin
      if SaveDialog.execute then
      begin
         //sauvegarde des graphs dans un répertoire temporaire
         simpleGrah1.SaveToFile(RepertoireTemp+'Recto.graph');
         simpleGrah1.SaveToFile(RepertoireTemp+'Verso.graph');
     
         //Creation de la Liste de Fichier pour creer l'archive
         AStringList:=TStringList.create;
         try
            AstringList.Add(RepertoireTemp+'Recto.graph');
            AstringList.Add(RepertoireTemp+'Verso.graph');
     
            //Création de l'archive
            BackupFile1.SaveFileID:=True;
            BackupFile1.BackUp(AstringList,SaveDoialog.Filename);
         finally
            //Libérer le StringList
            AStringLiszt.Free;
         end;
      end;
    end;
    etc...

    Sinon, comme autre fonctionalité pour faire de la sauvegarde fichier par fichier, ou n'extraire que certains fichiers, mais là c'est plus compliqué à utiliser, tu as les méthodes BacUpToStream et RestoreFromStream. L'ouverture, et l'écriture de tes fichiers se faisant alors par l'intermédiaire de TFileStream. Pour voir comment ça marche, il faut jeter un oeil à la Démo qui est proposée avec le composant.

    Bon courage !

  10. #10
    Membre éclairé Avatar de Bourak
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 231
    Par défaut Enregistrer deux fichier dans un seul fichier.
    Merci Waskol;
    Merci lil_jam36;
    Merci à tous pour votre aide.
    Waskol j'ai pensé à la méthode de lil_jam36
    A ta place, je passerais par des TFileStream et TMemoryStream, tu enregistres tes graphs dans des TMemoryStream à l'aide de la méthode saveToStream(), ensuite tu crées un fichier en utilisant un TFileStream et tu enregistres tes fluxs l'un derrière l'autre tout en prennant soin de délimiter les fichiers. Pour la lecture, tu effectue l'opération inverse.
    Aussi j'ai pensé à votre méthode Waskol mais il'ya des autres problèmes dans mon projet qui m'enpèche d'utiliser votre méthode, mais j'ai trouvé une méthode qui ma expliqué Kambiz dans un autre forum, et voici la solution en utilisant Stream pour enregistrer 2 simplegraph dans un seul fichier:
    Kambiz ma proposé d'utiliser une procedure SaveMutipleGraphs pour le sauvgarde et LoadMutipleGraphs pour l'ouverture :
    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
     
    procedure SaveMutipleGraphs(const FileName: String; Graphs: array of TSimpleGraph); 
    var 
      Stream: TFileStream; 
      I: Integer; 
    begin 
      Stream := TFileStream.Create(FileName, fmCreate or fmShareExclusive); 
      try 
        for I := Low(Graphs) to High(Graphs) do 
          Graphs[I].SaveToStream(Stream); 
      finally 
        Stream.Free; 
      end; 
    end; 
     
    procedure LoadMutipleGraphs(const FileName: String; Graphs: array of TSimpleGraph); 
    var 
      Stream: TFileStream; 
      I: Integer; 
    begin 
      Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); 
      try 
        for I := Low(Graphs) to High(Graphs) do 
          Graphs[I].LoadFromStream(Stream); 
      finally 
        Stream.Free; 
      end; 
    end;
    Voici un exemple d'utilisation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TMainForm.btnSaveClick(Sender: TObject); 
    begin 
      SaveMutipleGraphs('C:\TEST.MG', [SimpleGraph1, SimpleGraph2]); 
    end; 
     
    procedure TMainForm.btnLoadClick(Sender: TObject); 
    begin 
      LoadMutipleGraphs('C:\TEST.MG', [SimpleGraph1, SimpleGraph2]); 
    end;
    Merci à Kambiz
    et Merci à tous
    et merci à dieu.

    Bourak 8)

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

Discussions similaires

  1. Concaténation de deux colonnes dans un seul fichier
    Par logiclogic dans le forum SAS Base
    Réponses: 2
    Dernier message: 17/09/2012, 13h15
  2. Fusion de deux pdf dans un seul fichier pdf
    Par PAULOM dans le forum ODS et reporting
    Réponses: 2
    Dernier message: 03/06/2010, 09h04
  3. rassembler plusieurs fichiers dans un seul fichier
    Par emelfr dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/02/2009, 14h57
  4. Réponses: 2
    Dernier message: 22/09/2007, 15h37
  5. stocker/archiver plusieurs fichiers dans un seul fichier
    Par tatoo59 dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 03/06/2007, 18h57

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