Как открыть текстовый файл, который не находится в той же папке? - PullRequest
0 голосов
/ 28 мая 2010

Поскольку C - это не тот язык, на котором я привык программировать, я не знаю, как это сделать.

У меня есть папка проекта, в которой хранятся все файлы .c и .h, и папка conf, в которой находится файл config.txt для чтения. Как я могу открыть это?

FILE* fp = fopen("/conf/config.txt", "r");

if (fp != NULL)
{
    //do stuff
}

else
   printf("couldn't open file\n");

Я получаю сообщение об ошибке. Почему?

Кстати, это должно работать только на Windows, а не Linux.

Спасибо.

Ответы [ 3 ]

6 голосов
/ 28 мая 2010

Простой способ - использовать абсолютный путь ...

my_file = fopen("/path/to/my/file.txt", "r");

Или вы можете использовать относительный путь. Если ваш исполняемый файл находится в /home/me/bin, а ваш текстовый файл в /home/me/doc, то ваш относительный путь может быть примерно таким:

my_file = fopen("../doc/my_file.txt", "r");

Важная вещь, которую следует помнить в относительных путях, заключается в том, что она относится к текущему рабочему каталогу при запуске исполняемого файла. Поэтому, если вы использовали вышеуказанный относительный путь, но находились в каталоге /tmp и запустили /home/me/bin/myprog, он попытается открыть /tmp/../doc/my_file.txt (или /doc/my_file.txt), который, вероятно, не существует.

Более надежный вариант - взять путь к файлу в качестве аргумента программы и передать его в качестве первого аргумента fopen. Простейшим примером будет просто использовать argv[1] из параметров main, т.е.

int main(int argc, char **argv)
{
    FILE *my_file = fopen(argv[1], "r");
    /* ... */
    return 0;
}

Конечно, вы захотите включить проверку ошибок, чтобы убедиться, что argc> 2 и т. Д.

0 голосов
/ 28 мая 2010

Расположение ваших файлов .c и .h на самом деле не является проблемой; проблема заключается в текущем рабочем каталоге при запуске исполняемого файла.

Не можете ли вы пройти полный путь к функции fopen()?

0 голосов
/ 28 мая 2010

Возможно, вы захотите взглянуть на семейство подпрограмм dirent для обхода каталога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...