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

C++ Discussion :

Lecture fichier binaire


Sujet :

C++

  1. #21
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par identifiant_bidon Voir le message
    Bon ben je réitère ma demande si jamais quelqu'un a une idée sur le sujet ...

    Merci
    Alors la, je ne comprend plus ton problème....
    1- Tu récupere un BLOB qui contient un PDF.
    2- Tu sait récupérer ce fichier, mais en mémoire.
    3- En la tu ne sait pas traiter ton PDF.

    Je me trompe?

  2. #22
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    C'est exactement ça ...

    Mon gros souci est qu'etant donné que je passe la donnée que je récupère dans ma dll en c++ a un webservice en c sharp, j'ai besoin de sérialiser le flux. Quand je traite le blob (qui est bien entier dans la base) avec la fonction Read, je n'ai pas le blob en entier mais je l'ai tronqué (jusqu'au caractère NUL).

  3. #23
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par identifiant_bidon Voir le message
    C'est exactement ça ...

    Mon gros souci est qu'etant donné que je passe la donnée que je récupère dans ma dll en c++ a un webservice en c sharp, j'ai besoin de sérialiser le flux. Quand je traite le blob (qui est bien entier dans la base) avec la fonction Read, je n'ai pas le blob en entier mais je l'ai tronqué (jusqu'au caractère NUL).
    Ah ok.
    Alors dernière question :
    C'est le blob qui n'est pas entier ou le pdf que tu récupère???

  4. #24
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Le blob est récupéré entier. C'est la fonction qui fait le traitement qui bloque au premier caractère NUL venu et qui donc du coup créé un pdf tronqué.

  5. #25
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par identifiant_bidon Voir le message
    Le blob est récupéré entier. C'est la fonction qui fait le traitement qui bloque au premier caractère NUL venu et qui donc du coup créé un pdf tronqué.
    [EDIT] cette question dépend de la lib [EDIT]

    Ben tu doit spécifier dans ta fonction que ce que tu récuper est binaire et non en text. C'est comme lire une image bmp avec notepad.

    Regarde ou tu peut spécifier cela.
    Sinon dit quel lib tu utilise, ou mieux, le bout de code qui récupère le pdf dans le blob

  6. #26
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968

  7. #27
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Je te remercie mongaulois. J'avais déja vu cette page. Il faut maintenant que j'arrive a mettre cela en application et a l'intégrer a mon code.

    Comme tu le disais, tout réside dans le fait de spécifier a ma fonction que je recupère bien un binaire et non un fichier texte tout simple.

  8. #28
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par identifiant_bidon Voir le message
    Je te remercie mongaulois. J'avais déja vu cette page. Il faut maintenant que j'arrive a mettre cela en application et a l'intégrer a mon code.

    Comme tu le disais, tout réside dans le fait de spécifier a ma fonction que je recupère bien un binaire et non un fichier texte tout simple.
    Quel lib utilise tu?

    [EDIT]

    Si c'est bien cette lib,
    fait comme eux, remplie ton buffer en stream

  9. #29
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Bonjour

    Lorsque j'utilise le code fourni dans la page plus haut, l'appel a la fonction setmode ne passe pas. J'suis vraiment en galère la, je sais pas ce qui se passe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    			result =			((ServerOra::CRecOra*)recObject)->GetBlob(CFACTURE_PAYEUR_BLOB);
     
    			//m_Facture_Blob.append(result.f);
    			OStartup();
     
    			unsigned char *buffer = 0;
    			fstream fs;

  10. #30
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par identifiant_bidon Voir le message
    Bonjour

    Lorsque j'utilise le code fourni dans la page plus haut, l'appel a la fonction setmode ne passe pas. J'suis vraiment en galère la, je sais pas ce qui se passe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    			result =			((ServerOra::CRecOra*)recObject)->GetBlob(CFACTURE_PAYEUR_BLOB);
     
    			//m_Facture_Blob.append(result.f);
    			OStartup();
     
    			unsigned char *buffer = 0;
    			fstream fs;
    ?? set Mode?? pour fstream ? pas grave tu fait
    fs.open("partout.bmp", ios::out | ios::binary);

    Bon je suppose que la lib est "Oracle® Objects for OLE C++ Class Library ". Mais peut tu confirmer?

  11. #31
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Désolé Mongaulois, je ne sais pas comment faire pour savoir de quelle lib il s'agit mais il y a de tout façon de grande chance pour qu'il s'agisse de celle ci.

    Quant à l'appel a la fonction open que tu donnes, mon souci provient du fait également que je n'ai pas de fichier "partout.bmp". (je n'ai aucun fichier a vrai dire juste un "flux pdf" - mon blob - en base)

  12. #32
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par identifiant_bidon Voir le message
    Désolé Mongaulois, je ne sais pas comment faire pour savoir de quelle lib il s'agit mais il y a de tout façon de grande chance pour qu'il s'agisse de celle ci.

    Quant à l'appel a la fonction open que tu donnes, mon souci provient du fait également que je n'ai pas de fichier "partout.bmp". (je n'ai aucun fichier a vrai dire juste un "flux pdf" - mon blob - en base)
    Je croit que tu te mélange les pinceaux. Voici le code adaptéà utiliser aprés avoir récupérer result. Tu ne devrait pas trop avoir de problème à le compiler.
    Tu pourrai ainsi vérifier que tu récupère bien le fichier PDF

    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
    std::ofstream f;
    f.open("c:/essai.pdf",std::ios::binary);
    unsigned long size = result.GetSize();
    // calcul de la taille du buffertemporaire optimale
    unsigned long optchunk = result.GetOptimumChunkSize();
    unsigned int bufsize = ((int)(32768/optchunk)) *optchunk;
    if (bufsize > size) bufsize = size;
    unsigned char *bufferTmp = new unsigned char[bufsize];
     
     
    result.EnableStreaming(size);
     
    short status= OLOB_NEED_DATA;
    unsigned long NbLue=0;
     
    while(status == OLOB_NEED_DATA)
     
    {
    NbLue= result.Read(&status, bufferTmp , bufsize);
    f.write(buffer, NbLue);
    }
    result.DisableStreaming();
     
    delete [] bufferTmp ;
    f.close();

  13. #33
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Toujours un hic, j'espère que je ne vais pas finir par vous fatiguer mais le problème c'est que je ne veux pas créer de fichier pdf.

    Je voudrais repasser mon flux blob (et le récupérer entièrement) pour le repasser a mon webservice. Mon webservice sera attaqué par mon php qui récupèrera le flux ENTIER et l'ouvrira a l'internaute.

  14. #34
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par identifiant_bidon Voir le message
    Toujours un hic, j'espère que je ne vais pas finir par vous fatiguer mais le problème c'est que je ne veux pas créer de fichier pdf.

    Je voudrais repasser mon flux blob (et le récupérer entièrement) pour le repasser a mon webservice. Mon webservice sera attaqué par mon php qui récupèrera le flux ENTIER et l'ouvrira a l'internaute.
    Dans un premier temps essai cela pour voir si ca marche
    , aprés tu remplace ifstream par un tableau que tu remplie. Si le PDF ecrit est correcte, ben t'as gagné. Tu sait récupérer ton fichier PDF du blob

  15. #35
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    je suis désésperé. Je bloque dans ton code au

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned long size = result.GetSize();
    ca me met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Runtime.InteropServices.SEHException: External component has thrown an exception.
    Désolé le c++ c'est vraiment pas mon truc

  16. #36
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    à l'exécution?

  17. #37
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    oui excuse moi, ca me met ça a l'exécution

  18. #38
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par identifiant_bidon Voir le message
    oui excuse moi, ca me met ça a l'exécution
    tu est sur du
    OStartup() ???

  19. #39
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    je l'ai viré. Tu penses que je devrai le mettre ?


    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
    29
    30
    31
    32
    33
    34
    35
    CODE_RETOUR CFacturePayeur::FromRecordset(ServerGen::CRec* recObject){
    	TraceLogMetier(LOG_NIVEAU_DEBUG,LC_DEB_LOG,"FromRecordset");
     
    	OBlob result;
     
    	unsigned char *szBlobBuffer[BLOB_SIZE];
     
    	CODE_RETOUR iRetour = CODE_RETOUR_ERREUR_RECORDSET;	
     
    	if (recObject != NULL )
    	{
    		if (recObject->isEOF()== false )
    		{
    			m_IdFacture			= __int32(recObject->GetLong(CFACTURE_PAYEUR_ID_FACTURE));
    			m_IdClient			= __int32(recObject->GetLong(CFACTURE_PAYEUR_ID_CLIENT));
    			m_Date				= CErgString(recObject->GetErgString(CFACTURE_PAYEUR_DATE_FACTURE));
    			m_MontantTTC		= __int32(recObject->GetLong(CFACTURE_PAYEUR_MONTANT_FACTURE));
    			m_Etat				= Etat_facture(__int32(recObject->GetLong(CFACTURE_PAYEUR_ID_FACTURE)));
    			m_CrdSerial			= __int32(recObject->GetLong(CFACTURE_PAYEUR_CRD_SERIAL_CARTE));
    			m_IdTypeCarte		= __int32(recObject->GetLong(CFACTURE_PAYEUR_ID_TYPE_CARTE));
    			result				= ((ServerOra::CRecOra*)recObject)->GetBlob(CFACTURE_PAYEUR_BLOB);
     
     
    			std::ofstream f;
    			f.open("c:/essai.pdf",std::ios::binary);
     
    			unsigned long lSizertr = result.GetSize();
     
    		}
    		iRetour = CODE_RETOUR_REUSSI;
    	}
     
    	TraceLogMetier(LOG_NIVEAU_DEBUG,LC_FIN_LOG,"FromRecordset");
    	return iRetour;
    }

  20. #40
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par identifiant_bidon Voir le message
    je l'ai viré. Tu penses que je devrai le mettre ?
    Quelque part oui mais pas ici. Apperemment il doit etre appeler avant l'utilisation de la lib (genre dans le main).
    La je ne sait pas trop, c'est comme ci le blob que tu récupère est faux... Mais si tu y arrivais avant ...

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

Discussions similaires

  1. Lecture fichier binaire et inversion d'octets
    Par zoro_le_renard dans le forum Fortran
    Réponses: 8
    Dernier message: 17/07/2007, 20h35
  2. Lecture fichier binaire
    Par djidji dans le forum Langage
    Réponses: 1
    Dernier message: 09/11/2006, 11h58
  3. Réponses: 5
    Dernier message: 02/10/2006, 22h54
  4. Lecture fichier binaire
    Par kek_net dans le forum Langage
    Réponses: 5
    Dernier message: 07/08/2006, 19h37
  5. Lecture fichier binaire
    Par gabule dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 30/05/2006, 15h53

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