выполнение имен файлов с пробелами в cmd pmt, переданных из программы c++
В данный момент я работаю над тем, чтобы моя программа выполнила программу (например, power point), а затем рядом с ней путь к файлу, который я хочу открыть. Моя программа получает путь к файлу с помощью:
dirIter2->path()
Я получаю 2 пути программы и файла, объединяю их в одну строку и передаю в следующую:
system(PathTotal.c_str())
Это работает отлично, но моя единственная проблема заключается в том, что когда имя файла имеет пробел в его имени, командная строка говорит, что он не может найти файл (потому что он думает, что имя файла заканчивается, когда он попадает в первый пробел. Я попытался обернуть его кавычками, но это имя файла acutal, которое нужно обернуть. (напр. я уже пробовал ". C:usersbobjohn это круто", но это должно быть так: C:usersbob"Джон Крут")
Есть ли у кого-нибудь предложения о том, как я мог бы это исправить? Я думал о том, чтобы получить путь к папке, где находится файл, а затем получить имя файла. Я бы завернул имя файла в кавычки, а затем добавил его в путь к папке. Я пробовал использовать- > path (), как и выше, но единственная проблема заключается в том, что он идет только за пределами каталога папки?
Существует ли команда boost, которая могла бы получить путь enitre к файлу, не получая его в качестве файла?
Я не склонен к этой идее, если у кого-то есть лучшие предложения
Спасибо
3 ответа:
Как в C, так и в C++ символ " \ " является escape-символом. Для некоторых вещей (например, '\n' или '\t') он вставляет управляющий код; в противном случае он просто дает вам следующий символ.
Итак, если вы сделаете что-то вроде:
fopen("C:\users\bob\john is cool", "r");
Он попытается открыть файл с именем
C:usersbobjohn is cool
Если вы хотите, чтобы эти символы ' \ ' были в выходных данных, вы должны их экранировать. Итак, вы хотите:
fopen("C:\\users\\bob\\john is cool", "r");
В Windows с Visual Studio я также успешно использовал разделители в стиле Unix:
fopen("C:/users/bob/john is cool", "r");
И на самом деле, вы можете перепутать их:
fopen("C:/users\\bob/john is cool", "r");
Я не знаком со строковыми операциями C, но не могли бы вы сделать следующее довольно легко?
int i = path.lastIndexOf("\\"); //Find the index of the last "\" String quotedPath = path.substring(0, i+1); //Get the path up until the last "\" quotedPath += "\"" + path.substring(i+2) + "\""; //Add quotes and concatenate the filename
Извините за Java, это самая близкая вещь, с которой я знаком. Я сделал это Вики-сообщество на случай, если кто-то сможет отредактировать код до эквивалентного C.