大家好我是Ning+,因为工作需要顺手写了个简单的下载与保存,主要要注意的地方是URLDownloadToFile形参需要_T()修饰的ANSI参数,这里我将FString转为String,然后String转为wchar_T 即可;
/*
@author:Ning+
@theme:URL下载图片 2020/04/01
*/
#include "Windows/AllowWindowsPlatformTypes.h"
#include "Windows/PreWindowsApi.h"
#include <tchar.h>
#include <iostream>
#include <urlmon.h>
#include "Windows/PostWindowsApi.h"
#include "Windows/HideWindowsPlatformTypes.h"
/*
#pragma comment(lib,"urlmon.lib") MS静态链接库:
*/
#pragma comment(lib,"urlmon.lib")
using namespace std;
//从指定URL下载瓦片
bool Uclass::DownLoadIMG(FString URL, FString SaveSource, FString SaveName)
{
string url = TCHAR_TO_UTF8(*URL);
size_t len = url.length();//获取字符串长度
int nmlen = MultiByteToWideChar(CP_ACP, 0, url.c_str(), len + 1, NULL, 0);//如果函数运行成功,并且cchWideChar为零,
//返回值是接收到待转换字符串的缓冲区所需求的宽字符数大小。
wchar_t* buffer = new wchar_t[nmlen];
MultiByteToWideChar(CP_ACP, 0, url.c_str(), len + 1, buffer, nmlen);
//转换为ASNI
string str = TCHAR_TO_UTF8(*SaveSource);
str = str + TCHAR_TO_UTF8(*SaveName);
std::wstring widstr = std::wstring(str.begin(), str.end());
const wchar_t *pwidstr = widstr.c_str();
HRESULT hr = URLDownloadToFile(NULL, buffer, pwidstr, 0, NULL);
if (hr == S_OK)
{
return true;
}
else
{
return false;
}
}