//-------------------------------------------------------------------------------------//
// Function : GetFile
// Parameter: LPCTSTR url, LPCTSTR filename
// Return : CString
// - 성공하면 "YES" 실패하면 에러메시지를 반환
// Note : url의 파일을 받아서 filename에 저장한다.
// LPCTSTR url - http프로토콜을 이용해 받아올 파일의 전체경로
// LPCTSTR filename - 파일을 저장할 local경로
//-------------------------------------------------------------------------------------//
CString CInternetImageCtrl::GetFile(LPCTSTR url, LPCTSTR filename)
{
HINTERNET hInternet, hURL;
// 연결
hInternet = InternetOpen( L"HTTPFILE", INTERNET\_OPEN\_TYPE\_PRECONFIG, NULL, NULL, 0);
if ( hInternet == NULL )
return L"인터넷이 연결되어 있지 않습니다.";
// url
hURL = InternetOpenUrl( hInternet, url, NULL, 0, INTERNET\_FLAG\_RELOAD, 0);
if ( hURL==NULL )
{
InternetCloseHandle( hInternet );
return L"서버오류로 연결할 수 없습니다.";
}
// 연결정보 확인
TCHAR szStatusCode\[10000\];
DWORD dwInfoSize = 10000;
HttpQueryInfo(hURL, HTTP\_QUERY\_STATUS\_CODE, szStatusCode, &dwInfoSize, NULL);
long nStatusCode = \_ttol(szStatusCode);
if (nStatusCode == HTTP\_STATUS\_OK)
{ // 정상
// local file 생성
HANDLE hFile;
hFile = CreateFile( filename, GENERIC\_WRITE, 0, NULL,
CREATE\_ALWAYS, FILE\_ATTRIBUTE\_NORMAL, NULL );
DWORD size;
DWORD dwRead, dwWritten; //, Recv=0;
char\* buf = NULL;
do
{
InternetQueryDataAvailable( hURL, &size, 0, 0 );
buf = new char\[size\];
InternetReadFile( hURL, buf, size, &dwRead );
WriteFile( hFile, buf, dwRead, &dwWritten, NULL );
delete buf;
} while ( dwRead != 0 );
CloseHandle( hFile );
}
else if (nStatusCode == HTTP\_STATUS\_NOT\_FOUND)
{ // 404에러
InternetCloseHandle( hInternet );
InternetCloseHandle( hURL );
return L"그림이 준비되지 않았습니다";
} else
{ // 그외의 에러..
InternetCloseHandle( hInternet );
InternetCloseHandle( hURL );
CString str;
str.Format( L"Unknown Error
Err code : %d", nStatusCode);
return str;
}
InternetCloseHandle( hInternet );
InternetCloseHandle( hURL );
return L"YES";
}
반응형
'Dev > C, C++' 카테고리의 다른 글
MFC에서 타이틀 변경은 어떻게 하나요? (1) | 2003.02.06 |
---|---|
MFC용 ADO클래스 (0) | 2003.02.06 |
Http프로토콜을 이용한 파일 업로드 (2) | 2003.01.18 |
EVC에서 다이얼로그에서 메인프레임의 타이틀 바꾸기.. (2) | 2002.12.30 |
컴파일시 꼬이는 헤더파일 방지.. (2) | 2002.12.21 |