【问题标题】:How to get the file list with from a remote sftp server in HH-MM-SS timestamp format如何从远程 sftp 服务器以 HH-MM-SS 时间戳格式获取文件列表
【发布时间】: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 时,如何获得正确的时间戳?

【问题讨论】:

标签: c++ ftp libcurl


【解决方案1】:

我不认为 libcurl 是一个很好的库。

试试 libssh 或 libssh2:

【讨论】:

  • 我可以用它来测试它,因为我已经编译并准备好了一个 libssh2。但是函数的文档显示:“获取目录的单个文件属性结构”。所以我认为我仍然需要以某种方式发出 LIST 命令。
  • 您拨打sftp_opendir,然后反复拨打sftp_readdir。 + 请注意,SFTP 中没有LIST 命令。那是FTP命令。 SFTP 是一种二进制协议,不像 FTP 那样是文本协议。
【解决方案2】:

通过获取文件列表,解析到相关文件列表,分别获取每个文件的时间戳来解决。

【讨论】:

  • @MartinPrikryl 如果有替代方案,那只会效率低下。
猜你喜欢
  • 2012-10-29
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多