У меня есть приложение на C ++, которое я разрабатываю для сканирования изображения и возврата координат, все приложение работает, как и ожидалось, за исключением этой последней проблемы, которую я не могу понять. пользователь загружает изображения в папку, а затем изображения запускаются по очереди в приложение в очереди. Проблема в том, что у нас тысячи пользователей со многими папками, и многие из них загружают папку / файлы с пробелом (например, «») в папку / имя файла.
При запуске приложения происходит сбой, я сузил его до того факта, что CImg не любит пробелы в пути.
Каждый раз, когда он запускается на моей локальной машине с пробелом в пути, я получаю следующую ошибку, которая, кажется, не говорит о многом.
Необработанное исключение в 0x00BE05F7 в jpeg-info.exe: 0xC00000FD: переполнение стека> (параметры: 0x00000000, 0x00242000).
[CImg] * CImgIOException * [instance (0,0,0,0,00000000, без общего доступа)] CImg :: load (): Не удалось открыть файл ‘J: \ uploads \ 41039 \ test name’ [CImg] * CImgIOException * cimg :: fopen (): не удалось открыть файл ‘J: \ uploads \ 41039 \ test name’ в режиме ‘rb’.
строка кода, на которой он не работает, находится здесь.
const char* imagePath = filename.c_str();
CImg<unsigned char> loadImage(imagePath);
Мне просто нужно найти способ передать путь к CImg с пробелами в строке, и он не прерывается.
Sidenote: У меня установлена файловая система 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();
Задача ещё не решена.
Других решений пока нет …