此代码正确获取selected_paths中指定的目录的内容,但仅限于目录为“C:”。如果目录是“D:”,则此代码将迭代我的应用程序的根目录(源文件所在的目录 - “D:\ excercizes \ QT_projects \ my_app”)。这是怎么回事?
QStringList my_app::extract_files_from_paths_(const QStringList& selected_paths)const
{
boost::filesystem3::path path;
QStringList result;
for (auto e : selected_paths)
{
boost::filesystem3::path path(e.toStdString().c_str());
if (boost::filesystem3::is_regular_file(path))
{
result.append(e);
}
else if (boost::filesystem3::is_directory(path) && !boost::filesystem3::is_empty(path))
{
std::vector<boost::filesystem3::path> paths_;
/*add everything from this path*/
std::copy(boost::filesystem3::directory_iterator(path), boost::filesystem3::directory_iterator(), // directory_iterator::value_type
std::back_inserter(paths_));
QStringList list_of_files;
for(auto e : paths_)
{
list_of_files.append(QString(e.string().c_str()));
}
return extract_files_from_paths_(list_of_files);
}
}
return result;
}
答案 0 :(得分:9)
D:
和D:\
是两个不同的东西。
D:\
指定D
驱动器D:
指定D
驱动器上的当前目录 每个驱动器存储一个当前目录(每个进程)。所以它不是boost
错误,它是一个Windows功能。
在cmd
shell中,您可以看到驱动器的当前目录(例如:)
cd d:
您可以通过指定路径来更改它:
cd d:\home
(请注意,如果您不在D
,这不会更改您当前的工作目录。)
cd /d d:
和cd /d d:\
会将shell的工作目录分别更改为D
的当前目录,以及D
的根目录。
答案 1 :(得分:5)
这不是一个错误。 C:
解析为驱动器C
上的当前目录,恰好是C:\
。 D:
解析为驱动器D
上的当前目录,恰好是D:\excercizes\QT_projects\my_app
。您应编写D:\
以列出驱动器D
根目录中的文件。