Я пишу программу на c ++, которая принимает имя файла в качестве аргумента в командной строке:
>> ./myprogram ../path/to/file.txt
Я знаю, что могу просто открыть fstream, используя argv[1]
, но программе требуется больше информации о точном расположении (т.е. полном пути) файла.
Я думал о добавлении argv[1]
к getcwd()
, однако очевидно, что в приведенном выше примере вы получите /path/../path/to/file.txt
. Не уверен, что fstream разрешит этот путь автоматически, но даже если бы он это сделал, у меня все еще нет полного пути без большой обработки строк.
Конечно, этот метод не будет работать вообще, если предоставленный путь уже будет абсолютным. А поскольку эта программа может быть запущена в Linux / Windows / etc, простое обнаружение начального символа '/' не поможет определить, был ли аргумент полным путем или нет.
Я думаю, что это довольно распространенная проблема, связанная с именами путей в разных ОС. Итак, как получить полный путь к аргументу командной строки и , как это обрабатывается между операционными системами ?