Accueil > Forum > > > > Ecrire un fichier à partir d'un TFileStream (pointant sur un autre fichier)
Ecrire un fichier à partir d'un TFileStream (pointant sur un autre fichier)
vendredi 14 juillet 2006 à 15:09:22 |
Ecrire un fichier à partir d'un TFileStream (pointant sur un autre fichier)

Squallou
|
Hello tout le monde.
J'ai un ptit problème : mon programme ouvre un gros fichier de 150Mo (donc je préfère passer par un FileStream qu'un MemoryStream pour travailler dessus).
Seulement j'aimerais faire un menu Enregistrer sous. Donc ça enregistrerait le contenu de mon FileStream dans un autre fichier (et donc le 1er serait inchangé). Je ne trouve vraiment pas comment faire à part passer par un MemoryStream (mais vu la taille de mon fichier vive la mémoire...).
Quelqu'un a-t-il une solution ?
Merci d'avance :)
|
|
vendredi 14 juillet 2006 à 15:37:19 |
Re : Ecrire un fichier à partir d'un TFileStream (pointant sur un autre fichier)

Francky23012301
|
Salut,
Tu veux copier un fichier dans un autre si j'ai bien compris :
*La réponse est içi : http://www.delphifr.com/tutoriaux/GUIDE-DEBUTANT-DELPHISTE_481.aspx. La justification de ma remarque est içi : http://delphipage.free.fr/flux.html.
Je t'ai déjà fais une remarque de ce site : tu dois chercher avant de poster. Il va falloir que tu changes de mentalité (j'insiste la dessus).
*Autre solution : utiliser un copyfile.
Pas besoin de répondre pour dire que tu as cherché avant de poster : vu le lien que j'ai passé, ce n'est pas vrai.
|
|
vendredi 14 juillet 2006 à 15:42:12 |
Re : Ecrire un fichier à partir d'un TFileStream (pointant sur un autre fichier)

Squallou
|
Merci pour la remarque mais si, j'ai cherché. Parce que justement je ne veux pas copier un fichier !
Je veux ouvrir un fichier, modifier des octets dedans, et sauvegarder le tout modifier dans un autre fichier. Avec un TMemoryStream c'est simple mais je voulais savoir si c'était possible avec un TFileStream (vu la taille de mon fichier).
|
|
vendredi 14 juillet 2006 à 15:44:16 |
Re : Ecrire un fichier à partir d'un TFileStream (pointant sur un autre fichier)
|
vendredi 14 juillet 2006 à 16:05:16 |
Re : Ecrire un fichier à partir d'un TFileStream (pointant sur un autre fichier)

Francky23012301
|
Attention : en changeant, en ajoutant des octets dans un fichier, tu risques de le bousiller (ca dépend de son type).
Pour ta question : MonStream.savetostream('C:\mon_fichier.txt'). //Fonctionne avec un TFileStream. //SaveToStream : en faisant TStream puis la touche F1, tu serais tombé dessus.
Maintenant pour modifier ton fichier : ca dépend précisement de ce que tu veux faire car plusieurs approche sont envisageables.
@+
|
|
vendredi 14 juillet 2006 à 16:17:07 |
Re : Ecrire un fichier à partir d'un TFileStream (pointant sur un autre fichier)

Squallou
|
Oui justement j'avais lu ce fameux SaveToStream. Hé bien mon Delphi ne le connais pas pour les TFileStream. Je ne sais pas pourquoi.
Sinon ça ne résous pas mon problème : j'ouvre mon fichier avec TFileStream (en lecture seulement). Je voudrais faire des modifs dessus (qui ne seront jamais écrite en dur dans le fichier), puis enregistrer ce contenu modifié dans un autre fichier. Je veux donc que le 1er reste intact (bien qu'on ait fait les modifs sur ce modèle).
Je pense que ce n'est pas possible sans TMemoryStream mais je demandais au cas où ça soit possible avec un TFileStream.
|
|
vendredi 14 juillet 2006 à 16:30:19 |
Re : Ecrire un fichier à partir d'un TFileStream (pointant sur un autre fichier)

Francky23012301
|
Je n'ai pas testé
Procedure ChangeMyFile(AFile,NewFile : string);
Var
FS1,FS2 TFileStream;
Begin
FS1:=TFileStream.Create(AFile,fmOpenRead);
FS2:=TFileStream.Create(NewFile,fmCreate);
FS1.Position.FS1.Size;
Try
FS1.Write(PChar('Codes-Sources')^,length('Codes-Sources'));
Finally
FS1.Position:=0;
FS2.CopyFrom(FS1,FS1.Size);
Finally
FreeAndNil(FS2);
FreeAndNil(FS1);
End;
End;
Procedure TForm1.Button1OncliCk(Sender : TObject);
var
newFile : string;
Begin
If Savedialog1.execute then NewFile:=savedialog1.filename;
With Opendialog1 do
Begin
Execute;
ChangeMyFile(FileName,NewFile);
End;
End;
Ouvre notepad : regarde à la fin de ton fichier (exe,wav,mp3,avi, zip ...). tu vois "Codes-sources". Ouvre ton fichier : il plante ===> On ne modifie pas un fichier (sauf texte) sans le bousiller.
|
|
vendredi 14 juillet 2006 à 16:38:39 |
Re : Ecrire un fichier à partir d'un TFileStream (pointant sur un autre fichier)

Squallou
|
J'avais fait un truc du genre. Le problème c'est que .write ne fera rien vu que le fichier est ouvert en lecture et pas écriture. Et si on rajoute l'écriture ça écrit direct dans le fichier (ce que je ne veux pas)... -_-
Je ne pense pas que ça soit possible sans MemoryStream (après tout ils servent à ça...).
Merci d'avoir essayé quand même.
|
|
vendredi 14 juillet 2006 à 16:47:56 |
Re : Ecrire un fichier à partir d'un TFileStream (pointant sur un autre fichier)

Francky23012301
|
Bien dans ce cas là, on réfléchit deux minutes et on obtient cela :
Procedure ChangeMyFile(AFile,NewFile : string);
Var
FS1,FS2 :TFileStream;
Begin
FS1:=TFileStream.Create(AFile,fmOpenRead);
FS2:=TFileStream.Create(NewFile,fmCreate);
FS1.Position:=0;
Try
FS2.CopyFrom(FS1,FS1.Size);
FS2.Position:=FS2.Size;
FS2.Write(PChar('Codes-Sources')^,length('Codes-Sources'));
Finally
FreeAndNil(FS2);
FreeAndNil(FS1);
End;
End;
procedure TForm1.Button1Click(Sender: TObject);
var
newFile : string;
Begin
If Savedialog1.execute then NewFile:=savedialog1.filename;
With Opendialog1 do
Begin
Execute;
ChangeMyFile(FileName,NewFile);
End;
end;
A mon avis si tu bloques sur ce genre de chose c'est que tu as pas le niveau pour continuer ton projet. Plutot que de jouer à Final Fantasy tu devrais lire quelques tutoriaux
Et ce que je te passes fonctionne : je viens de tester (chose que tu n'as meme pas eu le courage de faire)
|
|
vendredi 14 juillet 2006 à 16:50:33 |
Re : Ecrire un fichier à partir d'un TFileStream (pointant sur un autre fichier)

Francky23012301
|
J'explique :
On copie FS1 dans FS2. On se place à la fin de FS2 (qui est en écriture) et on rajoute le texte. On libère tout donc on créer le fichier.
Autre solution envisageable : copyFile. On ouvre le fichier en écriture OpenWrite on fait la modif et on enregistre.
J'ai du mal à croire que tu as cherché ou alors ta méthode de recherche est à revoir sérieusement.
|
|
Cette discussion est classée dans : fichier, partir, ecrire, tfilestream, pointant
Répondre à ce message
Sujets en rapport avec ce message
Importation de données à partir d'un fichier texte [ par manudel ]
Je dispose d'un fichier au format .DAT, composé de n enregistrements.Ce fichier est composé de 6 champs, avec le point virgule comme séparateur de cha
Ecrire en héxadécimal dans un fichier [ par sebastienbro ]
Voilà, j'aimerais savoir comment on fait pour écrire en héxadécimal dans un fichier. En fait, je voudrais, par exemple, dire d'écrire $20, et je voudr
Lire un fichier son encode à partir d'une url ? [ par Fredelphi ]
Bonjour,Comment puis-je faire pour lire un fichier encode par windows media encoder, à partir d'une url ?quelqu'un a une idée à me suggérer ?Car j'ai
Ouvrir un fichier a partir d'un serveur Web [ par MAsterC ]
Allo, j'ai essayer pomal toute les façons de faire, mais le résultat a échoué. :(Je voudrais savoir comment fait-on pour ouvrir un Fichier Texte (à pa
Lire et ecrire dans un fichier TXT [ par norton ]
Hello, alors j'aimerai pouvoir écrire dans un fichier TXT et que au lançemment de la form il lise le contenu du fichier TXT et l'ecrive dans une listB
Ecrire dans un fichier : HELP ME [ par TheChikenKiller ]
Afin de faire un logiciel de telechargement qui supporte la pause et la reprise, j'aimerai avoir davantage d'informations sur comment ecrire dans un f
Comment éxécuter un fichier XML á partir de DELPHI???? urgent [ par atupac1 ]
Mainteneant, j'ai juste besoin de savoir comment éxécuter un fichier XML á partir de DELPHI.
aide pour copie de fichier [ par Staphane ]
Bonjour <P cl
lancer un fichier directement a partir d'un TMemorystream [ par helmis ]
Peut on ?: copier un fichier du disque dur ds un MemoryStream executer ce fichier directement du memorystrem sans avoir recour a l'enregistrer sur
Copier un fichier à partir d'un repertoire sous reseau [ par hkm21 ]
salutj'amerais savoir comment acceder -a partir de mon apllication- à un repertoire sous reseau pour copier un fichier sur mon postemerci d'avance
Livres en rapport
|
Derniers Blogs
[HS] CHROME 6 + MOI = COUP DE GUEULE ![HS] CHROME 6 + MOI = COUP DE GUEULE ! par JeremyJeanson
Attention, le poste qui suit n'est pas la complainte d'une personne : Qui n'aime pas Chrome. D'un anti Google. D'un développeur qui a un poil énorme dans la main. Ceux qui me fréquentent savent que je change de navigateur favori tous les 2 ou 3 mois afin ...
Cliquez pour lire la suite de l'article par JeremyJeanson [WP7] UTILISER UN WRAPPANEL DANS UNE APPLICATION WINDOWS PHONE 7[WP7] UTILISER UN WRAPPANEL DANS UNE APPLICATION WINDOWS PHONE 7 par Audrey
Lors de la réalisation de ma 2ème application Windows Phone 7, j'ai souhaité utiliser un WrapPanel pour afficher plusieurs photos. Mais le contrôle WrapPanel ne fait pas parti de la liste des contrôles inclus dans le SDK de la version Beta des outils pour...
Cliquez pour lire la suite de l'article par Audrey [WP7] BESOIN D'AVOIR DES DONNéES EN CACHE[WP7] BESOIN D'AVOIR DES DONNéES EN CACHE par Nicolas
Les développeurs ASP.NET ont l'habitude de mettre des données en cache pour éviter de requêter a chaque fois la base de données. Et il est toujours utilie de penser que vos utilisateurs mobiles n'ont pas troujours une super connexion 3G/WIFI et un for...
Cliquez pour lire la suite de l'article par Nicolas [TFS] COMMENT FORCER LA SAISIE D'UN AREA OU ITERATION[TFS] COMMENT FORCER LA SAISIE D'UN AREA OU ITERATION par cyril
Lorsque l'on créé un Work Item dans TFS, il est possible de le classer dans un "area" et dans une "iteration". Dans la plupart des types de projet, un "area" correspond à une catégorie, une "iteration" à un numéro de version. Il est possible de cré...
Cliquez pour lire la suite de l'article par cyril SQL : FONCTIONS D'AGRéGATION MIN/MAX ET VALEURS NULLSQL : FONCTIONS D'AGRéGATION MIN/MAX ET VALEURS NULL par coq
Les fonctions d'agrégation comme MIN et MAX ignorent les valeurs NULL présentes dans le jeu de données sur lequel porte leur calcul, d'où le fameux message d'avertissement : Warning: Null value is eliminated by an aggregate or other SET operation...
Cliquez pour lire la suite de l'article par coq
Logiciels
Bureau de Gestion - ERP Devis Facturation (2.02)BUREAU DE GESTION - ERP DEVIS FACTURATION (2.02)
- Version gratuite du 10/06/2010
Le Bureau de Gestion est un logiciel dédié à la gestion de l'en...
Cliquez pour télécharger Bureau de Gestion - ERP Devis Facturation sDEVIS-FACTURES vlPRO (3.8.0)SDEVIS-FACTURES VLPRO (3.8.0)sDEVIS-FACTURES vlPRO a été mis au point pour permettre besoins des particuliers, créateurs, entr... Cliquez pour télécharger sDEVIS-FACTURES vlPRO LettresFaciles (5.6.0)LETTRESFACILES (5.6.0)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles MyPlanning 2010 (5.6.0)MYPLANNING 2010 (5.6.0)MyPlanning 2010 permet de créer des plannings sous la représentation de diagrammes. Plannings pré... Cliquez pour télécharger MyPlanning 2010 Emicsoft Mac DVD en iPad Convertisseur (3.1.16)EMICSOFT MAC DVD EN IPAD CONVERTISSEUR (3.1.16)Emicsoft Mac DVD en iPad Convertisseur, logiciel professionnel de convertir les fichiers DVD en i... Cliquez pour télécharger Emicsoft Mac DVD en iPad Convertisseur
|