'Данный файл или каталог отсутствует.' но файл есть

Как следует из названия, я пытаюсь открыть текстовый файл в том же каталоге, что и программа, которую я запускаю. Вот код, который я использую:

int main(int argc, char *argv[]){

    FILE *filePtr;
    filePtr = fopen("something.txt", "r");
    if (filePtr == NULL){
      printf("Oh dear, something went wrong with read()! %s\n", strerror(errno));
      return 1;
    }

  return 0;
}

Это распечатывает:

Oh dear, something went wrong with read()! No such file or directory

Я также пытался использовать fopen("./something.txt", "r");, но произошло то же самое.


person NoHoly    schedule 28.12.2019    source источник
comment
Вы действительно работаете с minix?   -  person Ctx    schedule 28.12.2019
comment
Относительный путь относится не к программе, а к текущему рабочему каталогу программы. Вы уверены, что cwd совпадает с расположением файла? Вы можете попробовать сначала распечатать его с помощью printf("CWD: %s\n", getcwd());   -  person Ctx    schedule 28.12.2019
comment
Спасибо, попробуем! И да, я должен сделать это в ОС minix...   -  person NoHoly    schedule 28.12.2019
comment
Иногда, если вы используете антивирус Avast, он не позволяет ему открыть файл из того же каталога, что и программа, которую вы запускаете. Поэтому я могу предложить вам, если вы его используете, попробуйте отключить его, а затем открыть.   -  person Poszer    schedule 28.12.2019
comment
@Poszer Я не думаю, что Avast доступен для Minix :-D   -  person hyde    schedule 28.12.2019
comment
Не видел, Миникс, извини.   -  person Poszer    schedule 28.12.2019
comment
@Ctx печатает CWD: /, так что... нужно что-то менять? Я попытался с /something.txt сейчас, но это все еще не работает.   -  person NoHoly    schedule 28.12.2019
comment
И существует ли этот файл в этом месте? (Показывает ли это ls /?)   -  person Shawn    schedule 28.12.2019
comment
О, это не так... но теперь я немного смущен. Я компилирую программу в определенном каталоге, а при запуске она переходит в другой каталог? Я думаю, что я что-то упускаю.   -  person NoHoly    schedule 28.12.2019
comment
с read() ошибка, что? В коде, который вы показываете, нет вызова read().   -  person alk    schedule 29.12.2019
comment
относительно: ` printf(О боже, что-то пошло не так с read()! %s\n, strerror(errno));` Сообщения об ошибках должны выводиться на stderr, а не stdout. Настоятельно рекомендуем: fprintf( stderr, "Oh dear, something went wrong with fopen()! %s\n", strerror(errno));   -  person user3629249    schedule 29.12.2019


Ответы (1)


1> Перейдите в каталог, где присутствует программа + исполняемый файл. Выполняйте оттуда. 2> Если нет, то есть вероятность какой-то проблемы, связанной с разрешением. попробуйте использовать [int access(const char *pathname, int mode)] API if(access("something.txt", R_OK) == 0)

тогда только вперёд. Это проверит, есть ли у вас разрешение на чтение или нет. Если у вас есть права root, попробуйте только открыть. Если не предоставить достаточное разрешение.

person UpendraG    schedule 30.12.2019