Должен ли я использовать URLDownloadToFile? - PullRequest
8 голосов
/ 03 марта 2011

Я ищу самый простой способ загрузить файл в C ++ (в Windows).URLDownloadToFile звучит великолепно и не требует от меня использования curl или других жирных библиотек, которые мне не нужны - каковы требования для этой функции?На каких Windows он будет работать?

Спасибо!

Ответы [ 3 ]

12 голосов
/ 03 марта 2011

http://msdn.microsoft.com/en-us/library/ms775123%28VS.85%29.aspx

Документация имеется по причине.

E: Просто взглянув на документацию, требуется минимум Internet Explorer 3.0 и Windows 95. Крайне мало компьютеров делаютне соответствует этим требованиям.

E: Вот пример использования этой функции.Вам также нужно связать Urlmon.lib для компиляции:

#include "stdafx.h"
#include <stdio.h>
#include <tchar.h>

#include <windows.h>
#include <Urlmon.h>

int _tmain(int argc, _TCHAR* argv[])
{
    printf("URLDownloadToFile test function.\n");

    TCHAR url[] = TEXT("http://google.com");

    printf("Url: %S\n", url);

    TCHAR path[MAX_PATH];

    GetCurrentDirectory(MAX_PATH, path);

    wsprintf(path, TEXT("%s\\index.html"), path);

    printf("Path: %S\n", path);

    HRESULT res = URLDownloadToFile(NULL, url, path, 0, NULL);

    if(res == S_OK) {
        printf("Ok\n");
    } else if(res == E_OUTOFMEMORY) {
        printf("Buffer length invalid, or insufficient memory\n");
    } else if(res == INET_E_DOWNLOAD_FAILURE) {
        printf("URL is invalid\n");
    } else {
        printf("Other error: %d\n", res);
    }

    return 0;
}
2 голосов
/ 04 марта 2011

Я использую эту функцию в приложении WTL C ++ и еще не встречал ни одного ПК, который ее не поддерживал (рассматриваемое приложение было установлено на тысячах клиентов, Windows 2000, XP, Vista и Windows). 7). Кроме того, нет никаких зависимостей .NET - он похоронен в старой Internet Explorer Win32 DLL. Он очень прост в использовании, принимает любой URL, и даже нормальное имя файла в стиле DOS будет работать (мы иногда используем его для извлечения файлов из общего сетевого ресурса.)

1 голос
/ 03 марта 2011

Как именно вы хотите, чтобы этот файл загружался и из какого источника? Если это из вашего собственного источника, я могу придумать несколько лучших способов и более переносимых способов.

Если у вас есть желание скачать из своего собственного источника, просто установите сокет с обеих сторон, отправьте размер файла, затем отправьте массив символов из fstream, получите массив символов и запишите в fstream назначения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...