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 :

probleme Tmemorystream permanent


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 160
    Par défaut probleme Tmemorystream permanent
    Bonsoir tout le monde, voilà j'ai un gros soucis je m'explique.

    Soit une declaration globale d'un Tmemorystream
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MY_MemoryStream:TMemoryStream;
    et dans le create du main form:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MY_MemoryStream:=TMemoryStream.Create;
    MY_MemoryStream.LoadFromFile('toto.tto');
    Ok, donc on créé le memorystream et on charge en memoire le fichier toto.tto
    Je n'ai pas mis de MY_MemoryStream.Free dans l'espoir de pouvoir utiliser 2 fois le stream...

    je vais m'expliquer

    Ensuite j'ai creer un objet

    Dans le create de cet objet j'ai ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Trucmuch.LoadFromStream('toto.tto',My_MemoryStream);
    Bon maintenant je creer une premiere instance de l'objet en question
    on passe dans le create et on charge Trucmuch à partir du stream

    Jusqu'ici tout va bien.

    Maintenant si je veux creer une deuxieme instance de cet objet
    lorsque je repasse dans le create
    au momment de l'execution de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Trucmuch.LoadFromStream('toto.tto',My_MemoryStream);
    j'ai une erreur indice hors limite [0]
    ce qui me fait penser que le memorystream est vide.

    J'ai absolument besoin de pouvoir charger en memoire un fichier binaire arbitraire, et de pouvoir l'utiliser x fois via un loadfromstream.

    Je ne peux me permettre des loadfromfile... Je ne veux pas d'acces au disque dur.

    En fait je cherche a creer une sorte de MemoryStream permanent, qui garde en memoire le fichier chargé jusqu'au close final de l'application (je le libererai avec un free a ce momment là)

    Par pitié... Aidez moi, je patauge dans la panade...

    Qu'est-ce qui m'echappe?

    Aurriez vous un petit bout de code pour realiser cela

    D'avance merci.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 160
    Par défaut puisque personne ne veux/peux m'aider...
    Je vais vous faire part de mes reflexions derechef... Des fois que ca puisse m'aider ou aider quelqu'un d'autre.

    Voilà ce que je me suis dit à tord ou a raison (je verifirais lorsque j'aurais un delphi sous la main).

    Il n'y a aucune raison pour que le memory stream soit vide apres utilisation (sauf appel en interne d'un eventuel flush on d'un truc du genre)... Et vu qu'il n'y a pas eu de free... Les données doivent etre encore en memoire.

    Alors quoi?

    AMHA je pense qu'apres la premiere utilisation du Memorystream il doit y avoir un pointeur qui se retrouve à la fin de l'espace memoire créé ou un truc du genre...

    Peut-être que je dois ramener ce pointeur au debut du stream memoire pour faire une seconde lecture du stream.

    Hein...

    Qu'en pensez-vous?
    Ca se tient comme théorie non?

  3. #3
    Membre éclairé Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Par défaut
    t'as essayé à l'indice 1 ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 160
    Par défaut C'est une palisanterie n'est-ce pas?
    Citation Envoyé par zemeilleurofgreg
    t'as essayé à l'indice 1 ?


    Mmmmmm a moins que ce ne soit l'inverse...

  5. #5
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 131
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 131
    Par défaut
    Yep !
    Peut-être que je dois ramener ce pointeur au debut du stream memoire pour faire une seconde lecture du stream.
    Peut-être même sûrement, IMHO,
    --
    jp

  6. #6
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    [QUOTE=darkvadr]
    dans le create du main form:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MY_MemoryStream:=TMemoryStream.Create;
    MY_MemoryStream.LoadFromFile('toto.tto');
    Ok, donc on créé le memorystream et on charge en memoire le fichier toto.tto
    Je n'ai pas mis de MY_MemoryStream.Free dans l'espoir de pouvoir utiliser 2 fois le stream...
    Ensuite j'ai creer un objet
    Dans le create de cet objet j'ai ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Trucmuch.LoadFromStream('toto.tto',My_MemoryStream);
    Maintenant si je veux creer une deuxieme instance de cet objet
    lorsque je repasse dans le create
    // que veux tu dire; que tu: MY_MemoryStream:=TMemoryStream.Create; tu peut pas le faire car déjà crée

    si non, avant ce ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Trucmuch.LoadFromStream('toto.tto',My_MemoryStream);
    ajoute celui là: MY_MemoryStream.Seek(0,soFromBeginning);
    [QUOTE]
    bah, ujuste une idée

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 160
    Par défaut mais bien sur tu as raison!
    Non je ne le creer pas deux fois...

    Le create du stream est dans le main form

    Et le loadfromstream dans le create d'un objet maison

    et je creer plusieurs instances de cet objet maison...

    Donc on repasse dans le create (de l'objet maison) a chaque instanciation...

    Bon je me comprend. C'est l'essentiel, mais j'espere quand meme me faire comprendre.

    Bref...

    Le problême est clair maintenant!

    C'est le Seek!

    c'est lui qui va faire pointer au bon endroit dans le memorystream

    Comment ai-je pu passer à côté de cela.

    Que la foudre s'abatte sur moi.

    Ce n'est pas une idée que tu as eu, c'est la solution bien sur...
    Merci donc ...

    Je testerais ca lundi, mais je passe le flag en resolut.

    Ca ne fait aucun doute!

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

Discussions similaires

  1. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  2. Réponses: 2
    Dernier message: 30/05/2002, 08h54
  3. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01
  4. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

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