我正在编写一个C++代码,我需要使用libssh2_sftp_readdir_ex()函数LIBSSH2列出路径中的所有文件和目录。
但是,我试图运行这个示例(sftpdir.c),我注意到代码会打印所有文件和目录以及统计数据、权限等,我正在寻找只打印文件和目录名称的方法。
基本上,我正在尝试从C++中包含由libssh2_sftp_readdir_ex()命令生成的输出的字符串向量中获取文件名。这些条目如下所示:
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),进行此解析的最佳方法是什么?
发布于 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)的显示信息。
https://stackoverflow.com/questions/69488412
复制相似问题