boost :: filesystem中的错误?

时间:2011-12-06 10:42:21

标签: c++ qt boost

此代码正确获取selected_pa​​ths中指定的目录的内容,但仅限于目录为“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;
}

2 个答案:

答案 0 :(得分:9)

在Windows上,

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根目录中的文件。