#include <urlmon.h>
#include <iostream>
#pragma comment(lib, "urlmon.lib")
using namespace std;
class MyCallback : public IBindStatusCallback
{
public:
MyCallback() {}
~MyCallback() { }
// This one is called by URLDownloadToFile
STDMETHOD(OnProgress)(/* [in] */ ULONG ulProgress, /* [in] */ ULONG ulProgressMax, /* [in] */ ULONG ulStatusCode, /* [in] */ LPCWSTR wszStatusText)
{
cout << "Downloaded " << ulProgress << " of " << ulProgressMax << " byte(s), " << " Status Code = " << ulStatusCode << endl;
return S_OK;
}
// The rest don't do anything...
STDMETHOD(OnStartBinding)(/* [in] */ DWORD dwReserved, /* [in] */ IBinding __RPC_FAR *pib)
{
return E_NOTIMPL;
}
STDMETHOD(GetPriority)(/* [out] */ LONG __RPC_FAR *pnPriority)
{
return E_NOTIMPL;
}
STDMETHOD(OnLowResource)(/* [in] */ DWORD reserved)
{
return E_NOTIMPL;
}
STDMETHOD(OnStopBinding)(/* [in] */ HRESULT hresult, /* [unique][in] */ LPCWSTR szError)
{
return E_NOTIMPL;
}
STDMETHOD(GetBindInfo)(/* [out] */ DWORD __RPC_FAR *grfBINDF, /* [unique][out][in] */ BINDINFO __RPC_FAR *pbindinfo)
{
return E_NOTIMPL;
}
STDMETHOD(OnDataAvailable)(/* [in] */ DWORD grfBSCF, /* [in] */ DWORD dwSize, /* [in] */ FORMATETC __RPC_FAR *pformatetc, /* [in] */ STGMEDIUM __RPC_FAR *pstgmed)
{
return E_NOTIMPL;
}
STDMETHOD(OnObjectAvailable)(/* [in] */ REFIID riid, /* [iid_is][in] */ IUnknown __RPC_FAR *punk)
{
return E_NOTIMPL;
}
// IUnknown stuff
STDMETHOD_(ULONG, AddRef)()
{
return 0;
}
STDMETHOD_(ULONG, Release)()
{
return 0;
}
STDMETHOD(QueryInterface)(/* [in] */ REFIID riid, /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject)
{
return E_NOTIMPL;
}
};
Пробую загрузить файл на диск C:\\
int main(int argc, char* argv[])
{
std::wstring location = L"C:\\выходной файл";
std::wstring url = L"https://www.codeproject.com/script/Articles/Download.aspx?file=/KB/winsdk/registrymonitor/RegistryMonitor_src.zip&rp=https://www.codeproject.com/Articles/4502/RegistryMonitor-a-NET-wrapper-class-for-RegNotifyC";
MyCallback pCallback;
URLDownloadToFile(NULL, url.c_str(), location.c_str(), 0, &pCallback);
system("Pause");
return 0;
}
Но файл не появляется, если же изменить путь в
std::wstring location = L"C:\\"; на std::wstring location = L"C:\\File.rar" то файл появляется нужного размера, но открыть его невозможно, пишет что:
Архив повреждён
Продвижение своими сайтами как стратегия роста и независимости