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

SL & STL C++ Discussion :

problème avec ofstream::write


Sujet :

SL & STL C++

  1. #1
    b4u
    b4u est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Points : 64
    Points
    64
    Par défaut problème avec ofstream::write
    bonjour,

    je cherche a remplir un flux de sortie, tant qu'il y a encore des données (issues de la lecture d'un fichier via le protocole FTP) à y envoyer. Mais à la fin de toute l'opération, je constate que mon fichier de sortie contient des octets en moins (si j'utilise l'opérateur <<) ou en trop (si j'utilise la méthode ofstream::write). Voici un testcase réduit:
    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
    ofstream ofs(dst, ios::trunc);
    if (!ofs)
    	return false;
    char buf[256];
    int n = sizeof(buf);
    int s = 0;
    while (42)
    {
    	if (!FtpRead(src, buf, n))
    		return false;
    	if (n <= 0)
    		break;
    	ofs.write(buf, n);
    	s += n;
    }
    FtpEndRead();
    L'entier s ne sert qu'a débuguer, il compte le nombre d'octets total lus par FtpRead(). A la sortie de la boucle, s contient bien la taille du fichier src, comme attendu. Par contre, le fichier dst est trop gros (sa taille est supérieure à la valeur de s)... le problème viendrait de ofs.write() ?

    Voici la méthode FtpRead (qui utilise l'API wininet):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    bool	CNetwork::FtpRead(const char *file, const char *dst, int &size)
    {
    	if (_h_ftp == NULL)
    	{
    		_h_ftp = FtpOpenFile(_h_connect, file, GENERIC_READ, FTP_TRANSFER_TYPE_BINARY, 0);
    		if (_h_ftp == NULL)
    			return false;
    	}
    	DWORD n;
    	if (InternetReadFile(_h_ftp, (LPVOID)dst, (DWORD)size, &n) == FALSE)
    		return false;
    	size = n;
    	return true;
    }
    Merci d'avance :-)

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Et en ouvrant ton fichier en mode binaire ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ofstream ofs(dst, ios::trunc | ios::binary);

  3. #3
    b4u
    b4u est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Points : 64
    Points
    64
    Par défaut
    tout simplement, merci bcp...
    j'étais persuadé que le mode binaire était utilisé par défaut

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    j'étais persuadé que le mode binaire était utilisé par défaut
    Il n'existe pas de flag pour ouvrir en mode texte, donc forcément non

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

Discussions similaires

  1. Problème avec Response.write et <!DOCTYPE .. >
    Par Gunny dans le forum ASP.NET
    Réponses: 2
    Dernier message: 22/07/2008, 15h41
  2. problème avec ofstream
    Par rodgeurette dans le forum SL & STL
    Réponses: 4
    Dernier message: 18/07/2007, 14h02
  3. Problème avec ofstream et ios::app
    Par Clad3 dans le forum SL & STL
    Réponses: 8
    Dernier message: 07/01/2007, 12h10
  4. [C++] Problème avec ofstream
    Par Mathieu.J dans le forum SL & STL
    Réponses: 4
    Dernier message: 27/03/2006, 12h51
  5. Problème avec document.write()
    Par d.w.d dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 19/01/2006, 12h06

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