我正在开发一个C ++应用程序来扫描图像并返回坐标,整个应用程序按预期工作,除了这个我似乎无法弄清楚的最后一个问题。用户将图像上载到文件夹,然后图像一次一个地运行到队列中的应用程序。问题是,我们有成千上万的用户拥有许多文件夹,并且有相当数量的用户在文件夹/文件名中上传带有空格(例如“”)的文件夹/文件。
当应用程序运行崩溃时,我已将其缩小到CImg不喜欢路径中的空格这一事实。
每次它在我的本地计算机上运行时,路径中都有一个空格,我得到以下错误,这似乎没什么用。
jpeg-info.exe中0x00BE05F7处的未处理异常:0xC00000FD:堆栈溢出>(参数:0x00000000,0x00242000)。
[CImg] * CImgIOException * [instance(0,0,0,0,00000000,non-shared)] CImg :: load():无法打开文件'J:\ uploads \ 41039 \ test name'
[CImg] * CImgIOException * cimg :: fopen():无法以模式'rb'打开文件'J:\ uploads \ 41039 \ test name'。
它失败的代码行就在这里。
const char* imagePath = filename.c_str();
CImg<unsigned char> loadImage(imagePath);
我只需要找出一种方法将一个路径传递给CImg,并在字符串中添加空格,但不会中断。
旁注:我确实安装了boost文件系统,如果这样可以更容易找到这个解决方案。
编辑:
我正在以两种不同的方式获取文件名但没有运气来解决这个问题。
原始方式:(直接传递const char)
const char* filename = cimg_option("-i", "path/to/file/jpeg.jpg", "input jpeg path");
新方式:(抓取路径并使用boost来正确格式化)
const char* getInput = cimg_option("-i", "path/to/file/jpeg.jpg", "input jpeg path");
std::string filename = boost::filesystem::absolute(getInput).string();