Использовать относительный путь с помощью fopen

#c #linux #fopen

#c #linux #fopen

Вопрос:

Я пытаюсь открыть файл внутри каталога через fopen .

Абсолютный путь следующий:

 /home/user/Desktop/project/src/users/login.json
 

Main.c моего приложения находится здесь:

 /home/user/Desktop/project/src
 

Я пробовал следующие форматы, но они не работают (возвращает нулевой указатель и errno равен 2):

 FILE *f = fopen("./users/login.json", "rb");
FILE *f = fopen("/users/login.json", "rb");
FILE *f = fopen("login.json", "rb");
FILE *f = fopen("src/login.json", "rb");
FILE *f = fopen("./src/login.json", "rb");
 

Вместо этого работает абсолютный путь:

 FILE *f = fopen("/home/user/Desktop/project/src/users/login.json", "rb");
 

Комментарии:

1. A.out находится в /home/user/ Desktop / project (у меня такая же проблема, если я использую Clion)

2. @xing я уже пробовал использовать FILE * f = fopen("users/login.json", "rb"); в своем main.c (вкл /home/user/Desktop/project/src . ), но он все равно не работает.

3. Вы можете сделать getcwd (получить текущий рабочий каталог) и построить путь оттуда.

4. @xing не работает

5. getcwd может указывать путь, отличный от того, что вы думаете.

Ответ №1:

Я решил это, используя FILE * f = fopen ("src/users/login.json", "rb"); и изменив рабочий каталог Clion на /home/user/project