【问题标题】:'No such file or directory.' but file is there'无此文件或目录。'但文件在那里
【发布时间】:2020-04-18 04:35:02
【问题描述】:

正如标题所暗示的,我试图在与我正在运行的程序相同的目录中打开一个文本文件。这是我正在使用的代码:

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");,但同样的事情发生了。

【问题讨论】:

  • 您确实在使用 minix?
  • 相对路径不是相对于程序,而是相对于程序的当前工作目录。您确定 cwd 与文件的位置相同吗?你可以先尝试打印,printf("CWD: %s\n", getcwd());
  • 那个文件是否存在于那个位置? (ls / 显示了吗?)
  • "with read()" 错误,什么?在您显示的代码中没有对 read() 的调用。
  • 关于:` printf("天哪,read() 出了点问题!%s\n", strerror(errno));` 错误信息应该输出到stderr,而不是@ 987654328@。强烈建议:fprintf( stderr, "Oh dear, something went wrong with fopen()! %s\n", strerror(errno));

标签: c file fopen minix


【解决方案1】:

1> 进入程序 + 可执行文件所在的目录。从那里执行。 2> 如果不是,那么可能会出现一些与权限相关的问题。 尝试使用 [int access(const char *pathname, int mode)] API if(access("something.txt", R_OK) == 0)

那就继续吧。这将检查您是否具有读取权限。如果你有root权限,那么只尝试打开。如果没有提供足够的权限。

【讨论】: