Я написал супер простой инструмент командной строки C, который должен читать файл с пути, указанного в argv[1]
. Я отлаживаю, используя Xcode на OS X, поэтому рабочий каталог во время работы представляет собой созданный Xcode каталог, отличный от файла, который я хочу прочитать. (Xcode автоматически вставляет аргументы, так что это не проблема.) Я подозреваю, что проблема связана с тем, что я не понимаю, как работает fopen
. Когда я помещаю имя пути, это относительно рабочего каталога? Будет ли это работать, если я использую абсолютный путь?«fopen» возвращает NULL - «нет такого файла или каталога»
Я проверил this post, this one и this one, но они, похоже, не помогают мне в этом случае.
Вот код, я использую - это в main
функции:
for (int i = 0; i < argc; i++)
printf("arg%i: %s\n", i, argv[i]);
if (argc > 1)
{
//Open the file specified by the first argument
system("pwd");
FILE *file = fopen(argv[1], "r"); //Always returns NULL
if (file)
//This isn't ever reached
else
printf("%s\n", strerror(errno));
}
Выход выглядит следующим образом:
arg0: /Users/home/Library/Developer/Xcode/DerivedData/VSSequenceAlignment-avlfehlrtqiybygqfgueezoysnyi/Build/Products/Debug/VSSequenceAlignment
arg1: C:/Users/venkateshsivaramanDP/Documents/test/testdoc.txt
/Users/venkateshsivaramanDP/Library/Developer/Xcode/DerivedData/VSSequenceAlignment-avlfehlrtqiybygqfgueezoysnyi/Build/Products/Debug
No such file or directory
После изменения arg1 использовать слэши это не имеет изменила ошибку. По общему признанию, это на шаг ближе к реальной проблеме.
'argv [0]' кажется, это путь в стиле OSX, тогда как 'argv [1]' похоже на путь в стиле Windows; что с этим? –
Я видел, что некоторые люди использовали обратную косую черту на одном из сообщений SO, которые я связал, я думаю. Мне не показалось, что разница была, пока ты так не сказал. – architectpianist