Salut
Est_ce que c'est possible d'enregistrer deux fichier dans un seul fichier sous delphi.
Salut
Est_ce que c'est possible d'enregistrer deux fichier dans un seul fichier sous delphi.
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...
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
Lecture des fichiers et écriture dans le 3eme
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 )
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 ;-)
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.
donc comme vous voyer il y'a un seul FileName et 2 simplegraph.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SimpleGraph1.SaveToFile(SaveDialog.FileName); SimpleGraph2.SaveToFile(SaveDialog.FileName);
Merci d'avance.
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 ;-)
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 !
Bonjour mes frères!
Merci pour tous vous réponses!
Explique moi comment je peut utilisé TBackupFile.
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.
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.Envoyé par Bourak
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 :
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
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;
c'est pas compliqué hein ?
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;
Si je souhaite inclure en plus la ListedesFichier.txt voici le code à peine modifié :
etc...
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;
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 !
Merci Waskol;
Merci lil_jam36;
Merci à tous pour votre aide.
Waskol j'ai pensé à la méthode de lil_jam36
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: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.
Kambiz ma proposé d'utiliser une procedure SaveMutipleGraphs pour le sauvgarde et LoadMutipleGraphs pour l'ouverture :
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
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;
Merci à Kambiz
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;
et Merci à tous
et merci à dieu.
Bourak 8)
Partager