Невозможно скопировать файлы на общий диск Windows с использованием протокола libCurl и FILE

Я использую curl-7.62.0, созданный для машины VC17 X64, для разработки утилиты загрузки файлов. Загрузчик файлов загружает файл на сетевой диск. Каталог сборки curl имеет .exe и .dll файлы

Я смог запустить эту команду из оболочки Windows и смог успешно загрузить файл на сетевой диск.

<path_to_curl>\bin\curl --upload-file C:\file.txt file:////<ip_address>/ShareDrive/
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100  1403    0     0  100  1403      0  87687 --:--:-- --:--:-- --:--:-- 87687

Теперь я хочу достичь того же самого программно и пишу свой компонент на C ++. У меня есть функция загрузки, как показано ниже:

int Uploader::upload(const std::string& url) {
CURLcode res;
FILE *hd_src;
struct stat file_info;
curl_off_t fsize;

if (stat(LOCAL_FILE, &file_info)) {
printf("Couldnt open '%s': %s\n", LOCAL_FILE, strerror(errno));
return -1;
}
fsize = (curl_off_t)file_info.st_size;

printf("Local file size: %" CURL_FORMAT_CURL_OFF_T " bytes.\n", fsize);

hd_src = fopen(LOCAL_FILE, "rb");

curl_global_init(CURL_GLOBAL_ALL);

curl_ = curl_easy_init();
if (curl_) {
curl_easy_setopt(curl_, CURLOPT_UPLOAD, 1L);

curl_easy_setopt(curl_, CURLOPT_URL, url.c_str());

curl_easy_setopt(curl_, CURLOPT_READDATA, hd_src);

curl_easy_setopt(curl_, CURLOPT_READFUNCTION, read_callback);

curl_easy_setopt(curl_, CURLOPT_INFILESIZE_LARGE,
(curl_off_t)fsize);

res = curl_easy_perform(curl_);
}

fclose(hd_src);
return 0;
}

И мой обратный вызов в глобальной области видимости:

static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream)
{

printf("Called...\n");

size_t retcode = fread(ptr, size, nmemb, (FILE*)stream);
printf("*** We read %lld bytes from file\n", retcode);
return retcode;
}

И мой главный выглядит так:

int main(int argc, char** argv) {
Uploader uploader;
uploader.upload("file:////<ip_address>/ShareDrive/");
}

Элемент управления никогда не переходит к методу обратного вызова вообще, и, следовательно, загрузка никогда не происходит. Поддерживает ли CURL протокол FILE? Я могу видеть примеры FTPUpload, HTTPupload, но нет примеров с протоколом FILE в Windows.

Я делаю это правильно?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]