如何使用 libcurl 打印远程 FTP 目录列表?
How do I use libcurl to printf a remote FTP directory listing?
我想我应该使用 CURLOPT_DIRLISTONLY
但我不确定如何继续。
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DIRLISTONLY, long listonly);
我不确定如何调用以实际打印列表。
为 FTP 启用 CURLOPT_DIRLISTONLY
选项具有仅检索文件名而不是文件详细信息(例如文件大小、日期等)的效果,基本上作为使用普通 ls
(仅名称)或 UNIX 上的 ls -l
(包含详细信息的列表)。在 FTP 协议级别,启用 CURLOPT_DIRLISTONLY
将使 libcurl 发出 NLST
命令而不是 LIST
。然后要获取目录列表,您需要执行与文件传输相同的操作,不同之处在于您的 ftp://
URL 将指向目录(而不是文件)。该传输的内容将成为您的目录列表。
要显示目录列表而不是将其保存到文件中,您可以使用 CURLOPT_WRITEFUNCTION
选项让 libcurl 调用您为每个数据块提供的回调函数。该函数只需要将数据 fwrite
到 stdout
即可显示。它应该看起来像这样:
void write_callback(void* data, size_t size, size_t nmemb, void* ptr)
{
fwrite(data, size, nmemb, stdout);
}
int main()
{
// ...
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, write_callback);
// ...
ret = curl_easy_perform(handle);
}
我想我应该使用 CURLOPT_DIRLISTONLY
但我不确定如何继续。
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DIRLISTONLY, long listonly);
我不确定如何调用以实际打印列表。
为 FTP 启用 CURLOPT_DIRLISTONLY
选项具有仅检索文件名而不是文件详细信息(例如文件大小、日期等)的效果,基本上作为使用普通 ls
(仅名称)或 UNIX 上的 ls -l
(包含详细信息的列表)。在 FTP 协议级别,启用 CURLOPT_DIRLISTONLY
将使 libcurl 发出 NLST
命令而不是 LIST
。然后要获取目录列表,您需要执行与文件传输相同的操作,不同之处在于您的 ftp://
URL 将指向目录(而不是文件)。该传输的内容将成为您的目录列表。
要显示目录列表而不是将其保存到文件中,您可以使用 CURLOPT_WRITEFUNCTION
选项让 libcurl 调用您为每个数据块提供的回调函数。该函数只需要将数据 fwrite
到 stdout
即可显示。它应该看起来像这样:
void write_callback(void* data, size_t size, size_t nmemb, void* ptr)
{
fwrite(data, size, nmemb, stdout);
}
int main()
{
// ...
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, write_callback);
// ...
ret = curl_easy_perform(handle);
}