在 Linux 中使用 C++ 列出目录的所有文件不起作用
Listing all files of a directory using C++ in Linux is not working
我使用了以下代码。
dp = opendir( dir.c_str() );
while ((dirp = readdir( dp )))
{
filepath = dir + "/" + dirp->d_name;
}
但dirp->d_name
值如下。
.\000\000\000\004\324E\020\000\000\000\000\000\324!+^S\361Tf
\030\000\004..\000\000\004\237X\ 00\000\000\000\000fJ\035\224\321M\264l(\000\bFontTest1.pdf\000\000\000\000\000\000\b\236X\ 00\000\000\000\000\377\377\377\377\377\377\377\377(\000\bproject_report.pdf\000\000\b
您是否错误
地处理了"."和".."目录? (每个目录都有它们)
我用以下方法排除了它们:
std::string fn(ent->dname);
if(fn == ".") { if(dbg2) { std::cout << "S_DOT" << std::endl; } continue;}
if(fn == "..") { if(dbg2) { std::cout << "D_DOT" << std::endl; } continue;}
。在处理各种d_types之前
switch(ent->d_type)
{
case DT_UNKNOWN: {...}
case DT_DIR: {...}
// ... etc
}
"继续"跳到循环处理 dirent 条目的开头。
最好的跨平台方法是如果你有filesystem
库。不幸的是,这现在仍然是一个技术规范,所以你需要使用这个库的Boost版本,或者:experimental/filesystem
。
一旦你有了filesystem
,你可以简单地使用一个directory_iterator
:
copy(directory_iterator(dir), directory_iterator(), ostream_iterator<path>(cout, "n"))
这个例子可能有点复杂。如果我能为您澄清一些事情,请告诉我。
在 Visual Studio 2015 中,如果您只需#include <filesystem>
并执行using namespace tr2::sys
,则此代码将运行。不幸的是,gcc 5.3 还没有实现directory_iterator.operator++()
,所以你需要在那里 Boost,否则你会得到一个错误,如下:
对
std::experimental::filesystem::v1::__cxx11::directory_iterator::operator++()
的未定义引用
谢谢大家。我能够通过添加以下代码对其进行排序。 无符号字符是文件 =0x8; if ( dirp->d_type == isFile) 处理它
相关文章:
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在其他文件中创建类时在 c++ 项目中不起作用
- g++ -I 和 -L 命令来查找不起作用的 .hpp 文件
- 该程序将.csv文件中的一系列单词放入数组中,然后随机生成句子.但它不起作用
- 无法打开包含文件'Graphics.hpp'没有这样的文件或目录,Visual Studio的其他包含不起作用
- 从类中的另一个文件请求函数不起作用
- 即使我正在.cpp文件中实例化一个伪对象,.cpp文件内模板函数的定义也不起作用
- 简单的二分搜索对我不起作用。我正在尝试从文本文件中搜索单词
- SFML 加载从文件不起作用,奇怪的错误
- C++密钥和文件的映射不起作用
- 从 TXT 文件中删除行不起作用
- QT QML:使用.qrc文件将SQLite数据库部署到Android不起作用
- bcdedit 文件输出不起作用,但其他命令可以
- 文件写入在PHP扩展c / c ++(linux)中不起作用
- Makefile在Linux中工作,但在Windows下不起作用,在子目录中找不到文件
- 使用 libcurl C++将文件下载到 Ubuntu,简单示例不起作用
- 尝试读取数据文件,存储在数组中并打印所有元素,但它不起作用
- 为什么写入文件不起作用
- 包括不起作用C 的文件
- 在 C++ 中,.h 文件包含文件但不起作用