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 :

[D7] Parcourir un TMemoryStream avec un TWriter


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    390
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 390
    Points : 127
    Points
    127
    Par défaut [D7] Parcourir un TMemoryStream avec un TWriter
    Bonjour, je suis en Delphi 7 et j'aimerai modifier un TMemoryStream en le parcourant. Voici le code de test déjà présent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    aMemoryStream := TMemoryStream.Create();
    aMemoryStream.LoadFromFile(aFileName);
    aWriter:=TWriter.Create(aMemoryStream, 4096);
    try
    // Parcours du writer pour tester si aWriter.ReadString <> 'test'
    // Sinon je modifie (WriteString)
    Finally
    aWriter.Free;
    end;
    Est-ce possible ?

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 710
    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 710
    Points : 25 593
    Points
    25 593
    Par défaut
    TReader c'est pour lire un DFM
    TWriter c'est pour écrire un DFM
    Est-ce ton fichier est de format DFM ?
    Si oui,
    Si c'est un DFM Binaire, utilise plutôt ReadComponent, tu changes la propriété puis WriteComponent
    Si c'est un DFM Texte, tu peux tricher avec un TStringList ou sinon convertir le DFM Texte en DFM Binaire via System.Classes.ObjectTextToBinary

    Si non,
    Utilise tout simplement les méthodes Read et ReadBuffer
    Si tu dois modifier, Write ou WriteBuffer si la nouvelle donnée est de la même longueur que l'ancienne donnée
    Si la nouvelle donnée a une longueur différent, il faut décaler tout le reste du binaire, dans ce cas DEUX Stream, l'un copier dans l'autre

    Ta version est trop ancienne, tu n'as pas les classes TStreamReader et TStreamWriter qui sont conçu pour lire un fichier texte, j'ai conçu TTextFileReader en D7 pour lire de très gros fichier texte
    je l'utilise encore aujourd'hui sous XE2 dans sa version Ansi TSLTTextFileReader

    Tu ne dois pas non plus avoir TBinaryReader et TBinaryWriter en D7 ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    390
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 390
    Points : 127
    Points
    127
    Par défaut
    C'est bien un DFM binaire.

    J'ai une question : Je ne pourrais pas le "décrypter" (CryptUnCrypt) ,le parcourir comme un fichier texte, le modifier si besoin, puis le réEncrypter et l'enregistrer ?

    C'est un peu barbare, mais je cherche juste à remplacer une chaine de caractère par une autre...

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 710
    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 710
    Points : 25 593
    Points
    25 593
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    ... ou sinon convertir le DFM Texte en DFM Binaire via System.Classes.ObjectTextToBinary
    TMemoryStream -> ObjectBinaryToText -> TStringStream -> TStringList ou StringReplace brutal -> TStringStream -> ObjectTextToBinary -> TMemoryStream !
    ou
    TMemoryStream -> ReadComponent -> Component.Property := ... -> WriteComponent -> TMemoryStream

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

Discussions similaires

  1. Parcourir un champ avec une boucle
    Par gentoo dans le forum Access
    Réponses: 2
    Dernier message: 18/02/2007, 19h20
  2. Parcourir un répertoire avec un script
    Par dams78 dans le forum Linux
    Réponses: 7
    Dernier message: 13/12/2006, 22h09
  3. [SQL Server] parcourir une Table avec un FOR
    Par papouAlain dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/06/2006, 12h49
  4. Parcourir un XML avec namespace
    Par ujoodha dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 20/04/2006, 10h21
  5. parcourir les Jmenu avec les fleches directions avec [alt]
    Par mortalius dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 07/04/2006, 16h04

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