2014-02-27 37 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'; 
    } 
}