Curl回调仅在请求文件列表时提出一次

问题描述 投票:0回答:1

我正在使用cURL在ftp服务器的特定文件中检索文件列表,但是我遇到一个我不明白的问题。

这里是我的代码示例:

// In the init part of my code i call

CURLcode Code = CURL_LAST;

Code = curl_global_init(CURL_GLOBAL_ALL);
if (CURLE_OK == Code)
{
  mHandleCurl = curl_easy_init();
}

// ... and then the process part

curl_easy_reset (mHandleCurl);

Code = curl_easy_setopt(mHandleCurl, CURLOPT_VERBOSE, 1);
Code = curl_easy_setopt(mHandleCurl, CURLOPT_URL, "ftp://192.168.1.174/application");
Code = curl_easy_setopt(mHandleCurl, CURLOPT_DIRLISTONLY, "NLST");
Code = curl_easy_setopt(mHandleCurl, CURLOPT_WRITEDATA, (void * )&FileList);
Code = curl_easy_setopt(mHandleCurl, CURLOPT_WRITEFUNCTION, GetFileListCallback);
Code = curl_easy_setopt(mHandleCurl, CURLOPT_PORT, mPortnumber);
Code = curl_easy_setopt(mHandleCurl, CURLOPT_USERNAME, mUsername.String());
Code = curl_easy_setopt(mHandleCurl, CURLOPT_PASSWORD, mPassword.String());
Code = curl_easy_perform(mHandleCurl);

其中FileList只是一个字符串数组,而我的回调GetFileListCallback只是使用文件名恢复apContents数据以存储在FileList中:

size_t CFtp::GetFileListCallback(void *apContents, size_t aSize, size_t aNmemb, void *apUserp)
{
 ...
}

我的问题是:

为什么我的回调仅被调用一次,文件的完整列表位于相同的apContents中,而不是针对我正在查找的目录中的每个文件都被调用?

我希望为每个文件获取回调:“ file1.txt”“ file2.txt” ...但是我得到的是带有1的回调:“ file1.txtfile2.txtfile3 ...”(与\ n \ r分开,例如此file1.txt \ n \ rfile2)

[我在通常在Linux上工作且在Windows 10上工作的代码中提取了此示例,我不知道使用哪个版本的curl,但我使用的是cUrl-7.67.0,已编译为VC8的发行版。

[cURL版本或我在Windows上使用cURL的事实可能会导致工作方式出现差异吗?

file curl ftp
1个回答
0
投票

[CURLOPT_WRITEFUNCTION用从FTP数据连接中检索到的数据块(文件下载或目录列表)来调用。

该块被定义为最多为CURLOPT_WRITEFUNCTION(默认值为16KB)。

因此,每个文件不会调用一次。但是都没有完整列表(除非整个列表都适合一个块)。

© www.soinside.com 2019 - 2024. All rights reserved.