Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用C++;在Linux中不起作用_C++_Ubuntu 14.04 - Fatal编程技术网

C++ 使用C++;在Linux中不起作用

C++ 使用C++;在Linux中不起作用,c++,ubuntu-14.04,C++,Ubuntu 14.04,我使用了以下代码 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\n\000\000\000\000\00

我使用了以下代码

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\n\000\000\000\000\000fJ\035\224\321M\264l(\000\bFontTest1.pdf\000\000\000\000\000\000\b\236X\n\000\000\000\000\000\377\377\377\377\177(\000\bproject\u report.pdf\000\bproject\b000\bj\bj


最好的跨平台方法是使用该库。不幸的是,目前这仍然是一个技术规范,因此您需要使用Boost版本的该库或:
experimental/filesystem

一旦您有了
文件系统
,尽管您可以简单地使用:

copy(目录迭代器(dir),目录迭代器(),ostream迭代器(cout,“\n”))
这个例子可能有点复杂。如果我能为你澄清一些事情,请让我知道

在Visual Studio 2015中,如果您只是
#include
并使用名称空间tr2::sys执行
,则此代码将运行。不幸的是,gcc 5.3尚未实现
目录迭代器。运算符++()
,因此您需要在那里进行增强,否则将出现以下错误:

std::experimental::filesystem::v1::\uuuCXX11::directory\u iterator::operator++()


您是否可能错误地处理了“.”和“.”目录?(每个目录都有它们)

我以以下方式排除了他们:

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;}

“continue”跳转到循环处理dirent条目的开头。

谢谢大家。我可以通过添加以下代码对其进行排序。 无符号字符isFile=0x8; if(dirp->d_type==isFile)
//处理它

您是否检查了
dp
的值?请提供一个,以便其他人可以复制此问题显示相关名称的声明。“。\0”对于某些版本的格式化/呈现,似乎作为当前目录的C“字符串”有效。我正在尝试在Ubuntu的/pdftestcases中打开/home/mjc_。在这种情况下,dirp->d_name显示所有文件名介于一些垃圾字符之间。理想情况下,它应该一次显示一个文件名,而不显示任何垃圾字符。
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;}
switch(ent->d_type)
{
case DT_UNKNOWN: {...}
case DT_DIR:     {...}
// ... etc
}