从 libssh2_sftp_readdir_ex() 检索文件名

Retrieving file names from libssh2_sftp_readdir_ex()

我正在编写一个 C++ 代码,我需要使用 LIBSSH2 的 libssh2_sftp_readdir_ex() 函数列出路径中的所有文件和目录。

但是,我尝试 运行 示例 (sftpdir.c),我注意到代码会打印所有文件和目录以及统计信息、权限等,我正在寻找打印方法只有文件和目录名称。

基本上,我正在尝试从包含 libssh2_sftp_readdir_ex() 命令生成的输出的 C++ 字符串向量中获取文件名。条目如下所示:

drwxr-xr-x    2 sftpuser sftpgroup      318 Sep 29 13:33 .
drwxr-xr-x    4 root     root           36 Aug  6 22:18 ..
-rw-r--r--    1 sftpuser users         607 Aug  9 17:48 sample1.txt
-rw-r--r--    1 sftpuser users     1311881 Aug  9 17:48 sample1.docx
-rw-r--r--    1 sftpuser users       29380 Aug  9 17:48 sample1.xlsx
-rw-r--r--    1 sftpuser users      120515 Aug  9 17:48 sample2.docx
-rw-r--r--    1 sftpuser users       32924 Aug  9 17:48 sample2.xlsx
-rw-r--r--    1 sftpuser users       34375 Aug  9 17:49 sample3.docx
-rw-r--r--    1 sftpuser users        3541 Aug  9 17:49 sample3.txt
-rw-r--r--    1 sftpuser users       13246 Aug  9 17:49 sample3.xlsx
-rw-r--r--    1 sftpuser users    14169117 Aug  9 17:49 sample4.docx
-rw-r--r--    1 sftpuser users     2069007 Aug  9 17:49 sample_1280×853.png
-rw-r--r--    1 sftpuser users     4767276 Aug  9 17:49 sample_1920×1280.png
-rw-r--r--    1 sftpuser users    35898398 Aug  9 17:49 sample_5184×3456.png
-rw-r--r--    1 sftpuser users      534283 Aug  9 17:49 sample_640×426.png
-rw-r--r--    1 sftpuser users          20 Aug 31 18:56 testedown.txt

目前我已经在下面实现了这段代码,它应该将一个向量 (LSEntriesFull) 中的每个字符串解析为另一个只获取文件名的向量 (LSEntriesBrief):

const std::regex separator("\s+");

// Each element of LSEntriesFull we need to do the parsing
for (auto & it : LSEntriesFull) {
    std::regex_token_iterator<std::string::iterator> itr(it.begin(), it.end(), separator, -1);
    std::regex_token_iterator<std::string::iterator> end;

    while (itr != end) {
        // Lets print to stderr to check if its ok
        std::cerr << " [" << *itr++ << "]";
        // TODO: Filter in an optimal way only the file names
        LSEntriesBrief.emplace_back(*itr++);    // WRONG!!! It is getting all elements
    }
}

为了仅从向量 (LSEntriesFull) 中获取文件名并将其放入另一个向量 (LSEntriesBrief) 中,执行此解析的最佳最佳方法是什么?

libssh2_sftp_readdir_ex 通过 buffer 参数为您提供文件名。无需解析 longentry.

从文档上看确实不是很清楚


您不应出于任何其他原因尝试解析 longentry。正如 libssh2 文档所说:

The format of the `longname' field is unspecified by SFTP protocol.

longentry 仅供显示(由人类“解析”reader)。

勾选libssh2 sftpdir.c example。当 libssh2_sftp_readdir_ex returns 任何 longdesc 时,示例代码按原样打印它 。如果不是,它会从 buffer(示例中的 mem)和 attrsLIBSSH2_SFTP_ATTRIBUTES)中汇集显示信息。