Я использую функцию UrlToDownloadFile, но она не загружает файл. В компиляторе не отображается ошибка (используется VStudio 2012)
Вот код:
#include <Windows.h>
#include "urlmon.h"
#pragma lib "urlmon.lib"
using namespace std;
void dwFile();int _tmain(int argc, _TCHAR* argv[])
{
dwFile ();
return 0;
}
void dwFile ()
{
LPCSTR url = ("http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf");
LPCSTR fPath = ("C:\\Users\\Andyy\\Desktop\\test\\n3337.pdf");
HRESULT URLDownloadToFile ((NULL, url, fPath, 0, NULL));
}
Ваш код не выполняет никакой обработки ошибок, а ваша обработка строк неверна. Используйте это вместо:
#include <Windows.h>
#include "urlmon.h"
#pragma lib "urlmon.lib"
using namespace std;
void dwFile();
int _tmain(int argc, _TCHAR* argv[])
{
dwFile ();
return 0;
}
void dwFile ()
{
LPCTSTR url = TEXT("http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf");
LPCTSTR fPath = TEXT("C:\\Users\\Andyy\\Desktop\\test\\n3337.pdf");
HRESULT hr = URLDownloadToFile (NULL, url, fPath, 0, NULL);
if (FAILED(hr))
{
// do something ...
}
/* or more preffered:
LPCWSTR url = L"http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf";
LPCWSTR fPath = L"C:\\Users\\Andyy\\Desktop\\test\\n3337.pdf");
HRESULT hr = URLDownloadToFileW (NULL, url, fPath, 0, NULL);
if (FAILED(hr))
{
// do something ...
}
*/
}
Обратите внимание на следующий комментарий в документации:
URLDownloadToFile возвращает S_OK даже если файл не может быть создан и загрузка отменена. Если параметр szFileName содержит путь к файлу, убедитесь, что целевой каталог существует, прежде чем вызывать URLDownloadToFile. Для лучшего контроля за загрузкой и ее ходом рекомендуется интерфейс IBindStatusCallback.
Других решений пока нет …