2

我有一个 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();
4

0 回答 0