2014-02-27 38 views
0
for(directory_iterator i(l_path),end_iter; i != end_iter; i++){ 
    string im_name = filename; 
    //string im_name = i->path().filename().string(); 
    string l_filename = l_path + im_name; 
    im_name.replace(im_name.begin(),im_name.begin() + 4, string("right")); 
    string r_filename = r_path + im_name; 
    Mat lim = imread(l_filename),rim = imread(r_filename); 
    if(!lim.empty() && !rim.empty()){ 
     l_images.push_back(lim); 
     r_images.push_back(rim); 
    } 

} 

上面的崩潰啓動時,是的路徑在那裏,但由於某種原因,它不會運行。我已經試過了這個路徑,它運行。我不知道發生了什麼問題。謝謝你提供的所有幫助。下面是我申報的地方。我正在使用最新版本的boost和qt創建器以及開放式cv來獲得立體視覺的視差圖像,這就是我用來製作xml文件進行校準的原因。boost :: filesystem :: directory_interatory i(路徑)在qt創建器啓動時崩潰

filename = DISTFOLDER + string("stereo_calib.xml"); 

calib = new calibrator(LEFTFOLDER,RIGHTFOLDER,1.f,5,4,"lImage.png"); 
calib->calc_image_points(true); 
bool done = calib->calibrate(); 

if(!done){ 
    qDebug("stereo calibration failed"); 
} 
calib->save_info(filename); 
+0

我不知道你爲什麼不使用'的boost ::文件系統:: path'的路徑,但是這另一個問題... –

+0

請詳細說明它究竟如何/究竟在哪裏崩潰。這個問題更多的是爲了您的調試而不是我們的猜測。另外,我不確定第二個列表的哪一行實際上會調用第一個代碼中的代碼。 –

+0

對不起,沒有詳細說明,基本上發生的是程序在迭代文件路徑之前崩潰。我知道路徑在那裏,我只是不知道它爲什麼沒有找到它 – tengence

回答

0

即使try{... }catch阻止它仍然崩潰的QT,我不知道我在我的代碼或因爲它曾經工作過的QT環境的變化。

請注意,當從QT Creator運行控制檯運行控制檯時,它會壓縮,但直接從cmd或通過資源管理器運行應用程序工作得很好。

問題我認爲是QT環境變量混亂了。

唯一的解決方案是將QCoreApplication::applicationDirPath().toStdString()附加到boost::filesystem::directory_iterator iterator(string("tools/adb/"));並確保該字符串是boost所期望的路徑字符串。

的try catch塊輸出

is_directory failed with The system cannot find the path specified 

這裏是我當前的代碼:

try { 
    boost::filesystem::directory_iterator iterator(string("tools/adb/")); 

    for(; iterator != boost::filesystem::directory_iterator(); ++iterator) { 
     if(is_directory(iterator->path())) { 
      cout << (iterator->path()) << endl; 

      adb_s str; 
      str.path=iterator->path().string(); 
      boost::replace_all(str.path, "/", "\\"); 
      str.path+="\\"; 
      adb_path.push_back(str); 
     } 
    } 
} catch(const boost::filesystem::filesystem_error& e) { 
    if(e.code() == boost::system::errc::permission_denied) { 
     std::cout << "Search permission is denied for one of the directories "; 
     std::cout << "in the path prefix of \n"; 
    } else { 
     std::cout << "is_directory failed with "; 
     std::cout << e.code().message() << '\n'; 
    } 
}