2011-12-06 25 views
-1

このコードは、ディレクトリが "C:"の場合のみ、selected_pa​​thsで指定されたディレクトリの内容を正しく取得します。ディレクトリが "D:"の場合、このコードは、自分のアプリケーションのルートディレクトリ(ソースファイルがあるディレクトリ、 "D:\ excercizes \ QT_projects \ my_app")を繰り返し処理します。どうしたの?boost :: filesystemのバグ?

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

正しく動作していることを確認するまで、バグを想定しないでください。 –

+0

@Matとybungalobillに感謝します。あなた1人につき+ 1、マットを受け入れる;ありがとう – smallB

+0

彼らはあなたの_thanks_を見ません。ここではなく、答えの下にコメントを投稿する必要があります。 –

答えて

9

D:D:\は、Windowsでは2種類あります。

    D:\
  • Dドライブ
  • D:のルートが

一カレントディレクトリが(プロセスごとに)ドライブごとに記憶されているDドライブ上カレントディレクトリを指定する指定します。したがって、Windowsの機能であるboostのバグではありません。 cmdシェルで

、あなたは(例えば)とドライブの現在のディレクトリを見ることができます:

cd d: 

あなたがパスを指定して、それを変更することができます。

cd d:\home 

(このことに注意してくださいDにいない場合は現在の作業ディレクトリは変更されません)

cd /d d:およびcd /d d:\はそれぞれ変更されますシェルの作業ディレクトリは現在のディレクトリD、そしてルートはDです。

+0

+1私は前に知らなかったことをちょうど学んだ。 – user763305

5

これはバグではありません。 C:は、ドライブCの現在のディレクトリに解決されます。その場合はC:\になります。 D:は、ドライブDの現在のディレクトリに解決されます。その場合はD:\excercizes\QT_projects\my_appになります。ドライブDのルートにあるファイルを表示するには、D:\と記述します。

関連する問題