请求文件列表时,Curl回调仅引发一次

我希望使用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发行版。 / p>

cURL版本或我在Windows上使用cURL的事实是否可能导致工作方式上的差异?

lxleesjs 回答:请求文件列表时,Curl回调仅引发一次

通过从FTP数据连接(文件下载或目录列表)中检索到的大量数据调用

CURLOPT_WRITEFUNCTION

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

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

本文链接:https://www.f2er.com/3111131.html

大家都在问