Annedroid
04.04.2013, 22:47
Всем привет,
Моя программа загружает нужный компонент с сайта, раньше он весил 17 кб / 17 408 байт и можно было просто поставить максимальный размер буффера в функции (65 536) и эта проблема как бы отходила, но после упаковки файл стал весить 1,35 МБ, стало быть это 1 421 312 байт, мне нужен правильный код, чтобы выделить память, скачать, сохранить в файл и освободить память.
Вот мой предыдущий код:
int Get( char* szUrl, char* szFile )
{
BYTE cBuffer[ INTERNET_GET_MAX ];
HINTERNET hInternet = InternetOpenA( INTERNET_LOGIN, INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0 );
HINTERNET hFile = InternetOpenUrlA( hInternet, szUrl, 0, 0, INTERNET_FLAG_RELOAD, 0 );
DWORD dwReadSize = INTERNET_GET_MAX - 1;
int uResult = InternetReadFile( hFile, cBuffer, dwReadSize, &dwReadSize );
cBuffer[ dwReadSize ] = '\0';
InternetCloseHandle( hInternet );
InternetCloseHandle( hFile );
if ( uResult )
{
DeleteFileA( szFile );
HANDLE hOutputFile = CreateFileA( szFile, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_ALWAYS, 0, 0 );
uResult = WriteFile( hOutputFile, cBuffer, dwReadSize, &dwReadSize, 0 );
CloseHandle( hOutputFile );
return ( uResult ) ? ( uResult ) : ( 0 - GetLastError( ) );
}
return ( 0 - GetLastError( ) );
}
INTERNET_GET_MAX - 65 536, как уже писала ранее.
Возможно удастся как-то по частям загрузить.
П.с. курила malloc, все равно не очень понятно.
Заранее спасибо вам.
Моя программа загружает нужный компонент с сайта, раньше он весил 17 кб / 17 408 байт и можно было просто поставить максимальный размер буффера в функции (65 536) и эта проблема как бы отходила, но после упаковки файл стал весить 1,35 МБ, стало быть это 1 421 312 байт, мне нужен правильный код, чтобы выделить память, скачать, сохранить в файл и освободить память.
Вот мой предыдущий код:
int Get( char* szUrl, char* szFile )
{
BYTE cBuffer[ INTERNET_GET_MAX ];
HINTERNET hInternet = InternetOpenA( INTERNET_LOGIN, INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0 );
HINTERNET hFile = InternetOpenUrlA( hInternet, szUrl, 0, 0, INTERNET_FLAG_RELOAD, 0 );
DWORD dwReadSize = INTERNET_GET_MAX - 1;
int uResult = InternetReadFile( hFile, cBuffer, dwReadSize, &dwReadSize );
cBuffer[ dwReadSize ] = '\0';
InternetCloseHandle( hInternet );
InternetCloseHandle( hFile );
if ( uResult )
{
DeleteFileA( szFile );
HANDLE hOutputFile = CreateFileA( szFile, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_ALWAYS, 0, 0 );
uResult = WriteFile( hOutputFile, cBuffer, dwReadSize, &dwReadSize, 0 );
CloseHandle( hOutputFile );
return ( uResult ) ? ( uResult ) : ( 0 - GetLastError( ) );
}
return ( 0 - GetLastError( ) );
}
INTERNET_GET_MAX - 65 536, как уже писала ранее.
Возможно удастся как-то по частям загрузить.
П.с. курила malloc, все равно не очень понятно.
Заранее спасибо вам.