Проблема: сложить разные типы
От: khatsko  
Дата: 02.04.05 11:38
Оценка:
Прошу помочь разобраться со сложением типов. Уже несколько дней бьюсь — ничего не получается, понять не могу.

Необходимо считать бинарный файл из интернета, с открытием файла проблем нет (проблема похоже с преобразованием типов). Вот код:

#define HTTPBUFLEN 512 // Size of HTTP Buffer...
char httpbuff[HTTPBUFLEN];

CString strbuffer = "";
int fullbytes = 0;

CInternetSession mysession;
CStdioFile *remotefile = mysession.OpenURL(_szurl,1,INTERNET_FLAG_TRANSFER_BINARY|INTERNET_FLAG_RELOAD); // файл открылся нормально

CFile myfile(szpath, CFile::modeCreate|CFile::modeWrite|CFile::typeBinary); // здесь собираемся писать на жесткий диск
int numbytes;

while (numbytes = remotefile->Read(httpbuff, HTTPBUFLEN))
{
fullbytes += numbytes; // здесь считаем размер файла
strbuffer += httpbuff; // вот здесь вся проблема (см. ниже)
myfile.Write(httpbuff, numbytes);
}

Проблема вот в чем: по numbytes видно что считывается по 512 байт, однако к strbuffer буфер прибавляется не 512 байт а разное число байт: 4, 2, 6, 8, 16 и дальше в разброс. Почему так? И получается что реальный размер файла (fullbytes) отличается от длины строки strbuffer. Почему так? Как ПРАВИЛЬНО преобразовать char httpbuffer[] и BYTE* в CString?

И еще вопрос: CInternetFile::GetLength() не всегда возвращает реальный размер файла, говорят это из-за того, что весь WinInet — это глюк на глюке. Как можно получить размер файла по-другому?
Спасибо.



15.04.05 20:50: Перенесено модератором из 'C/C++' — Павел Кузнецов
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.