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:
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:
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 :-)