아마도 Microsoft WinHTTP Services, version 5.1 LIbrary의 WinHttpRequest클래스는 많이 써보셨을겁니다.. 잘보면 cHTTPFile클래스는 WinHttpRequest클래스처럼 URL정보를 효과적을 Query하는 메서드가 없고, 비동기전송을 하는 기능도 구현하지않았는데, 왜냐하면 이 클래스의 목적은 단지 '이어받기 지원'이므로구현하지는 않았습니다. (별로 사용하지 않는기능이기도 하고... 물론 귀찮아서 ㅡㅡ;;)
URL정보를 Query하는 루틴은 이미 cHTTPFile클래스에 있습니다만.. 전송방식은 동기전송방식이므로 비동기전송방식에 대한 코드가 없으므로 간단히 구현방향에 대해서 설명드리겠습니다.
간단하게 비동기전송방식으로 구현하시려면 InternetReadFileEx로 파일을 받는 루틴으로 변경하시고 와 Url연결부분에서 비동기모드로 연결하고 기타 여러가지 처리를 해주시면 됩니다.
아무튼 Wininet.dll의 API를 사용했으니 그런 멤버들을 구현하시기 어렵지는 않을것입니다.
우선 cHTTPFile 개체를 생성(WithEvents구문을 사용하셔서 각종 이벤트를 처리할수있습니다.)하신 후,
Connect메서드로 파일이존재하는 Url에 연결합니다. 이 메서드는 연결성공및 실패이유등을 아룻있도록 hfConnectResult열거형 상수중 하나를 반환합니다. 그리고 SetLocalPath메서드로 어느곳에 파일을 받을지 지정합니다. 첫번째인수는 받을 폴더주소이고, 두번째 인수는 파일이름인데 생략가능하며, 생략하면 URL의 파일이름으로 설정됩니다.
이렇게 다운로드 받을 URL과 저장할 위치를 정했으면,
Download메서드를 호출하시면 됩니다. 이때 다운로드 메서드인 인수 Overwrite를 True로 하시면. 기존에 존재하는 파일을 제거하고 다시받습니다. 그리고 그 인수를 False로 하면, 기존의 파일을 이어받기로 다운로드 받습니다. 그리고 cHTTPFile개체로 할일이 없다면. Disconnect메서드를 호출해서 연결을 끊으면 됩니다..
그 밖에 다른 멤버들은 설명할필요없이 이름 그대로의 기능(위에서 말한 것도 그렇지만..)을 합니다.. (-Cancel메서드로 다운로드받는중 다운로드를 취소가 가능하고, StatusCode속성은 200인경우 정상적인 URL이라고 알수있습니다..)
Example Code>>
※cHTTPFile는 cHTTPFile로 평가되는 식이고 Boolean은 True나 False로 평가될수있는 식입니다. 그리고 []는 생략가능한 인수입니다.
cHTTPFile.Connect "URL주소"
cHTTPFile.SetLocalPath "저장될 폴더위치", ["파일명"]
cHTTPFile.Download Boolean'덮어쓰기 혹은 이어받기할지 설정
cHTTPFile.Disconnect
이벤트를 사용하려면 WithEvents를 사용하셔서 다음 이벤트를 사용하면 됩니다.
Public Event Connect(State As hfConnectResult) //연결할때 발생
Public Event Disconnect() //연결을 끊을때 발생
//다운로드가 시작할때 발생
>>FileName은 다운받을 파일의 파일명이고, FileSize은 URL상의 파일크기입니다.
Public Event DownloadStart(ByVal FileName As String, ByVal FileSize As Long)
//다운로드가 시작할때 발생
>>Data()은 받아진 데이터의 내용이고, CurrentFileSize은 현재까지 받아진 크기입니다.
Public Event DownloadDataAvailable(Data() As Byte, CurrentFileSize As Long)
Public Event DownloadCompleted() //다운로드가 완료될때 발생
Public Event DownloadCancelled() //다운로드가 취소될때 발생
//다운로드가 실패할때 발생
>>Error는 실패원인으로 hfConnectResult 나 hfErrorCode 열거형상수값중 하나를 반환합니다.
Public Event DownloadFailed(ByVal Error As Long)
'프로그램언어 > VB' 카테고리의 다른 글
WININET API 선언문 (0) | 2008.04.24 |
---|---|
ToolTip Class (0) | 2008.03.25 |
INI(설정)파일 Read & Write 모듈 (0) | 2008.03.25 |
Registry Read & Write 샘플 프로젝트 소스 (1) | 2008.03.25 |
OS 언어 확인 (0) | 2008.03.24 |