:: URLDownloadToFile
웹에 있는 파일을 다운로드 하고 싶을 때 사용할 수 있는 함수입니다.
1. 선언하자.
우선 URL을 통해 파일을 다운로드하기 위해서 다음의 헤더 파일을 선언해야 합니다.
#include <urlmon.h>
2. 함수를 사용하자.
이제 실제로 다운 받을 파일의 링크 주소와 다운 받을 위치를 지정하면 됩니다.
이때 단순히 다운 받을 용도로 사용할 때에는 다음과 같이 하면 쉽게 다운로드가 가능합니다.
URLDownloadToFile(0, "URL 주소", "다운받을 위치", 0, 0);
단, "다운받을 위치"에 "C:\temp.txt" 이렇게 쓰는게 아닐라 "C:/temp.txt"라 쓰셔야 원하는 폴더에 저장이 됩니다.
우선 자세한 함수 설명을 보고 싶다면, 다음의 링크를 따라서 MSDN을 참조하시는게 가장 빠르고 좋습니다.
http://msdn.microsoft.com/ko-kr/library/ms775123(en-us,VS.85).aspx
위 함수의 경우 단순히 다운로드만 수행하고,
다운로드 프로그레스 바와 같은 구현을 하고자 할 때에는 마지막 매개변수에 callback 포인터를 남겨주면 됩니다.
단 2줄만 추가함으로써 바로 사용이 가능합니다.
참고로 리턴 값으로는 S_OK, E_OUTOFMEMORY, INET_E_DOWNLOAD_FAILURE 3가지가 있으니,
혹시 제대로 동작하는지 확인하고 싶으시다면 리턴 값을 받아서 조사해 보셔도 됩니다.
만약 정상 다운이 되었음에도 파일이 안 보인다면, 다운 경로에 문제가 있는 경우로 프로그램중인 폴더에 다운이 되어져 있을겁니다.
//////////////////////////////////////////////////////////////////////////////////////////
2.
특정 URL의 파일을 다운로드하기
1.요약
URLDownloadToFile 명령을 이용하면 특정 URL의 파일을 다운로드 할 수 있다.
2.본문
URLDownloadToFile의 프로토 타입은 다음과 같다.
HRESULT URLDownloadToFile(
LPUNKNOWN pCaller,
LPCTSTR szURL,
LPCTSTR szFileName,
DWORD dwReserved,
LPBINDSTATUSCALLBACK lpfnCB
)
pCaller : 다운 로드를 시도하는 ActiveX나 COM객체의 주소
szURL : 서버의 URL
szFileName : 로컬에 저장될 파일명
dwReserved : 0이어야 한다.
lpfnCB : 상태를 callback받을 객체의 주소값. IBindStatusCallback인터페이스를 구현한 클래스의 객체여야 한다.
그냥 다운만 받을거면
HRESULT hr = URLDownloadToFile(NULL, "http:/www.microsoft.com/123.avi",
"c:\\temp\\123.avi", 0, NULL);
하면 된다.
다운로드의 상태를 알고 싶다면 IBindStatusCallback인터페이스를 상속받은 클래스를 구현해서 그 객체의 주소를 마지막 인자로 넣어주면 된다. 그러면 IBindStatusCallback::OnProgress가 호출되어서 download상태를 알 수 있다
'C & C++ > C & C++' 카테고리의 다른 글
[Etc] 외부 프로그램 실행 (0) | 2011.02.18 |
---|---|
[Etc] 화면보호기 (0) | 2011.02.14 |
[MFC] UpdateData(TRUE) or UpdateData(FALSE) 구분하여 사용하기 (0) | 2011.02.11 |
CArray를 이용한 배열 선언 이해 (0) | 2011.02.11 |
[Etc] 특정 프로세스 cpu 점유율 체크 (0) | 2011.01.26 |
댓글