Ошибка в boost :: filesystem? - PullRequest
       0

Ошибка в boost :: filesystem?

0 голосов
/ 06 декабря 2011

Этот код корректно получает содержимое каталога, указанного в 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;
}

Ответы [ 2 ]

9 голосов
/ 06 декабря 2011

D: и D:\ - это две разные вещи в Windows.

  • D:\ обозначает корень диска D
  • D: обозначает текущий каталог на диске D

Один текущий каталог хранится на диске (на процесс). Так что это не ошибка boost, а функция Windows.

В оболочке cmd вы можете увидеть текущий каталог для диска с (например,):

cd d:

Вы можете изменить его, указав путь:

cd d:\home

(обратите внимание, что это не изменит ваш текущий рабочий каталог, если вы не используете D.)

cd /d d: и cd /d d:\ соответственно изменят рабочий каталог оболочки на текущий каталог D и на корень D.

5 голосов
/ 06 декабря 2011

Это не ошибка.C: разрешается в текущий каталог на диске C, который равен C:\.D: преобразуется в текущий каталог на диске D, который D:\excercizes\QT_projects\my_app.Вы должны написать D:\, чтобы перечислить файлы в корне диска D.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...