从 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
)和 attrs
(LIBSSH2_SFTP_ATTRIBUTES
)中汇集显示信息。
我正在编写一个 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
)和 attrs
(LIBSSH2_SFTP_ATTRIBUTES
)中汇集显示信息。