Поэтому я пытаюсь создать функцию для загрузки файла с переменным адресом в зависимости от пользователя с помощью строкового ввода, используя URLDownloadToFile()
, однако, похоже, что он не загружает файл на диск. Он пропускает S_OK
, E_OUTOFMEMORY
и INET_E_DOWNLOAD_FAILURE
до UNKNOWN_ERROR
. Использование GetLastError()
возвращает 2
, проверка в Интернете показала, что это означает "Not Found"
. Я не уверен, был ли это веб-сайт, который я использовал, или нет (это мой собственный сервер с Node.JS, использующий res.download(path, filename)
). Надеюсь на помощь, код приведен ниже.
Просто обратите внимание, все правильно включается по мере необходимости, и процесс (безопасно) запускается с SE_DEBUG_NAME
, поэтому, надеюсь, не должно быть ошибки разрешения.
// Convert String To Wide String
wstring S2WS(const string& str) {
int length;
int slength = (int)str.length() + 1;
length = MultiByteToWideChar(CP_ACP, 0, str.c_str(), slength, 0, 0);
wchar_t* buffer = new wchar_t[length];
MultiByteToWideChar(CP_ACP, 0, str.c_str(), slength, buffer, length);
wstring out(buffer);
delete[] buffer;
return out;
}
// Download File
int download(string url) {
wstring wUrl = S2WS(url);
LPCWSTR lUrl = wUrl.c_str();
TCHAR path[MAX_PATH];
GetCurrentDirectory(MAX_PATH, path);
HRESULT response = URLDownloadToFile(NULL, lUrl, path, 0, NULL);
if (response == S_OK) {
cout << "S_OK" << endl;
} else if (response == E_OUTOFMEMORY) {
cout << "E_OUTOFMEMORY" << endl;
} else if (response == INET_E_DOWNLOAD_FAILURE) {
cout << "INET_E_DOWNLOAD_FAILURE" << endl;
} else {
cout << "UNKNOWN_ERROR" << endl;
}
return 0;
}
// Example Usage
int main() {
download("http://somewebsite.com/files/textfile.txt");
}