【发布时间】:2020-10-14 20:03:57
【问题描述】:
我正在编写一个小应用程序,它使用 Curl 从远程 sftp 服务器读取文件列表。在获取文件列表并进行解析时,这不是问题:
curl_easy_setopt(m_pCurlSession, CURLOPT_WRITEFUNCTION, Callback);
curl_easy_setopt(m_pCurlSession, CURLOPT_URL, "sftp://xxxx.xx:22/");
curl_easy_setopt(m_pCurlSession, CURLOPT_USERNAME, "xxxx");
curl_easy_setopt(m_pCurlSession, CURLOPT_PASSWORD, "xxxx");
curl_easy_setopt(m_pCurlSession, CURLOPT_USE_SSL, static_cast<long>(CURLUSESSL_ALL));
curl_easy_setopt(m_pCurlSession, CURLOPT_VERBOSE, 1);
curl_easy_perform(m_pCurlSession);
我得到的输出是这样的
drwxrwxr-x 3 root root 4096 Jun 23 16:21 .
drwxr-xr-x 4 root root 4096 Jun 15 08:59 ..
drwxrwxr-x 2 user user 4096 Jun 23 17:11 IMAGES
-rw-rw-r-- 1 user user 152069 Jun 23 16:20 test.xml
如您所见,上次修改文件的时间戳为 HH:MM,但由于我的应用需要比较本地和远程文件的上次修改时间,因此我还需要查看秒数以便进行比较。
在使用 Filezilla 客户端进行测试时,我可以看到正确的时间戳,所以我很确定这不是服务器端的问题。
使用带有 SFTP 的 libcurl 发布 LIST 时,如何获得正确的时间戳?
【问题讨论】:
-
或许
CURLOPT_TIMECONDITION和CURLOPT_TIMEVALUE_LARGE可以用?我自己从来没有试过。否则,CURLOPT_FILETIME可用于请求文件时间。如果这些都失败了,你也许可以使用CURLOPT_CUSTOMREQUEST。我的赌注是CURLOPT_FILETIME。 -
我尝试了这些,它们似乎都适用于单个文件。也许我应该先阅读列表,然后为每个文件重置 curl 选项。