// src\2006\Test\test.cpp // 2006-02-13 #include #include #include class CDownload { public: CDownload(); ~CDownload(); void Open( LPCSTR user_agent ); void Close(); void Download( LPCSTR url, LPCSTR filename ); protected: HINTERNET m_hInternet; }; CDownload::CDownload() { puts("CDownload"); } CDownload::~CDownload() { puts("~CDownload"); } void CDownload::Open( LPCSTR user_agent ) { // WININET初期化 m_hInternet = ::InternetOpen( user_agent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if (NULL==m_hInternet) { puts("Error"); } } void CDownload::Close() { // 後処理 ::InternetCloseHandle( m_hInternet ); } void CDownload::Download( LPCSTR url, LPCSTR filename ) { HINTERNET hFile; FILE *fp; char Buf[1000]; DWORD nSize=0; // ファイルのオープン fp = fopen( filename, "wb" ); // エラーチェック // URLのオープン hFile = ::InternetOpenUrl( m_hInternet, url, NULL, 0, INTERNET_FLAG_RELOAD, 0); // エラーチェック // データを(1000バイトずつ)読み込む for(;;) { DWORD ReadSize = 1000; BOOL bResult = ::InternetReadFile( hFile, Buf, 1000, &ReadSize); nSize += ReadSize; // 全て読み込んだらループを抜ける if(bResult && (ReadSize == 0)) break; fwrite( Buf, 1, ReadSize, fp ); // エラーチェック } // 後処理 ::InternetCloseHandle(hFile); fclose(fp); printf( "Size=%dBytes\n", nSize ); }