2011-12-06 78 views
-1

此代碼正確獲取selected_pa​​ths中指定的目錄的內容,但前提是目錄爲「C:」。如果目錄是「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並接受Mat's;謝謝 – smallB

+0

他們不會看到你的_thanks_。你必須在他們的答案下面發表評論,而不是在這裏。 –

回答

9

D:D:\在Windows上是兩個不同的東西。

  • D:\指定D驅動
  • D:的根指定當前目錄D驅動

一個當前目錄每個驅動器存儲(每處理)上。所以它不是一個boost錯誤,它是一個Windows功能。

cmd外殼,可以看到一個驅動器與(例如)當前目錄:

cd d: 

您可以通過指定的路徑進行更改:

cd d:\home 

(注意,這如果您不在D上,則不會更改您當前的工作目錄。)

cd /d d:cd /d d:\將分別更改shell的工作目錄到D的當前目錄,以及D的根目錄。

+0

+1我剛剛學到了以前不知道的東西。 – user763305

5

這不是一個錯誤。 C:解析爲驅動器C上的當前目錄,這恰好是C:\D:解析爲驅動器D上的當前目錄,這恰好是D:\excercizes\QT_projects\my_app。您應寫入D:\以列出驅動器D的根目錄中的文件。

相關問題