2013-09-20 2 views
1

Я написал супер простой инструмент командной строки 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 использовать слэши это не имеет изменила ошибку. По общему признанию, это на шаг ближе к реальной проблеме.

+0

'argv [0]' кажется, это путь в стиле OSX, тогда как 'argv [1]' похоже на путь в стиле Windows; что с этим? –

+0

Я видел, что некоторые люди использовали обратную косую черту на одном из сообщений SO, которые я связал, я думаю. Мне не показалось, что разница была, пока ты так не сказал. – architectpianist

ответ

1

Ваш путь не так; вы используете путь Windows.

Сравните поставляемый путь с arg0, указав путь к исполняемому файлу. arg1 должен быть в том же стиле.

+0

Если вы имеете в виду обратную косую черту, изменение их вокруг не помогло в любом случае. Я все равно получаю ту же ошибку. – architectpianist

+0

Пути unix не начинаются с 'C:'. перейдите в файл, который хотите открыть в терминале, и выполните 'echo $ (pwd)/file_you_want_to_open'. Это путь, который вам нужно предоставить. – Femaref

+0

Там мы идем! Спасибо, это оказалось C: причиной проблемы. Если вы хотите добавить это к своему ответу, я пойду дальше и приму это. Поскольку мне может понадобиться использовать внешний диск для хранения файла, который я хочу прочитать в будущем, как бы я могу поехать по этому пути? – architectpianist

0

Да, абсолютные пути работают с fopen, но это не ваша проблема. Я думаю, что ваша проблема связана с содержанием arg[1], и я думаю, что он содержит C:\Users\home\Documents\test\testdoc.txt, который представляет собой путь к Windows, и вы находитесь на OS   X.

Смежные вопросы