首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从libssh2_sftp_readdir_ex()检索文件名

从libssh2_sftp_readdir_ex()检索文件名
EN

Stack Overflow用户
提问于 2021-10-07 22:12:45
回答 1查看 181关注 0票数 1

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

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

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

代码语言:javascript
运行
复制
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):

代码语言:javascript
运行
复制
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),进行此解析的最佳方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-08 05:04:03

libssh2_sftp_readdir_ex通过buffer参数给出文件名。不需要解析longentry

从文档中确实不是很清楚。

您不应该因为任何其他原因而尝试解析longentry。正如libssh2文档所述:

‘`longname’字段的格式未由SFTP协议指定。

longentry仅用于显示(由人类阅读器“解析”)。

检查一下libssh2 sftpdir.c example。当libssh2_sftp_readdir_ex返回任何longdesc时,示例代码将按原样打印它。否则,它将组装来自buffer (示例中的mem)和attrs (LIBSSH2_SFTP_ATTRIBUTES)的显示信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69488412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档