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 :

Streams, binaires et autres lectures limitees


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut Streams, binaires et autres lectures limitees
    Bonjour tout le monde

    Je cherche actuellement a faire, dans le cadre d'un serveur, une lecture de fichiers binaires de X octets, faire l'envoi au client, puis refaire une lecture de X octets... Ceci, afin de ne pas bloquer les autres clients lorsqu'un telecharge un gros fichier par exemple. Mais voila, ma lecture via les ifstreams ne marche absolument pas, et je suis completement perdu Quelqu'un aurait il une idee ?

    (Precision: je suis dans le cas ou le fichier est un binaire, une image en l'occurence pour mes tests)

    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
    36
     
    fileStream.open(file.c_str(), ios_base::in | ios_base::binary); //file est un string recuperee dans un autre endroit du code
    cerr << "opened ? " << fileStream.is_open() << endl; // affiche 1
    cerr << "good ? " << fileStream.good() << endl; // affiche 1
    request.append("\r\nContent-Length: ");
    fileStream.seekg(0, ios_base::end);
    size = fileStream.tellg();
    oss << size;
    request.append(oss.str());
    request += "\r\n";
    request.append("Accept-Ranges: bytes\r\n");
    request.append("Connection: keep-alive\r\n\r\n"); // Separation du header et du body par une paire de "\r\n"
    if (*idx > 0){ //*idx est un pointeur sur un int qui permet de reprendre la lecture la ou on l'avait laissee...
    	cerr << "clearing request\n";
    	request.clear(); // si on passe ici, on a pas besoin de header (en theorie)
    	fileStream.seekg(*idx);
    }
    else
    	fileStream.seekg(0, ios_base::beg);
    long pos = (long)fileStream.tellg() - *idx; // Je souhaitais pouvoir me placer dans mon tmp pour mettre le '\0', mais tellg me renvoit toujours -1 :(
    cerr << "opened ? " << fileStream.is_open() << endl; // renvoi 1
    cerr << "good ? " << fileStream.good() << endl; // renvoi 1
    fileStream.read(tmp, 4095); // char tmp[4096]... 1 octet pour mettre le '\0' (habitude unix... bonne ou pas ?)
    cerr << "tellg: " << (long)fileStream.tellg() << endl; // renvoi -1
    cerr << "idx: " << *idx << endl; // renvoi 0
    cerr << "pos: " << pos << endl; // renvoi -1
    //tmp[pos] = '\0'; // donc logiquement ca pete ici
    *idx = (long)fileStream.tellg(); // je garde en memoire la valeur de lecture pour reprendre plus tard
    if (*idx == size){ // si le fichier est complet, on met idx a -1 pour que la fonction appellante close la socket.
    	cerr << "Reseting *idx to -1";
    	*idx = -1;
    	request.append(tmp);
    	request += "\r\n";
    }
    else
    	request.append(tmp);
    Voila, j'ai essaye d'expliquer mon code au mieux ! J'avais aussi essaye avec la solution du get vu que d'apres les mans c'est pour les strings non formates, mais rien de mieux !

    Merci d'avance

    EDIT :: Me suis plante dans le sens entre ma lecture et l'appel aux methodes good et is_open. J'ai remis ca en ordre
    Dernière modification par Invité ; 31/03/2007 à 14h02.

  2. #2
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Pour les details, cherche tout seul !

Discussions similaires

  1. stream binaire en mémoire
    Par mister3957 dans le forum C++
    Réponses: 4
    Dernier message: 05/04/2009, 11h48
  2. Sauvegarde binaire Labview et lecture C
    Par gofio79 dans le forum LabVIEW
    Réponses: 2
    Dernier message: 31/03/2009, 10h23
  3. manipulation de stream binaire en php
    Par unmanos dans le forum Langage
    Réponses: 1
    Dernier message: 10/07/2008, 18h09
  4. [fichier binaire]lecture ecriture dump
    Par parsy dans le forum Langage
    Réponses: 7
    Dernier message: 10/08/2005, 18h40
  5. Réponses: 5
    Dernier message: 03/06/2005, 14h06

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