即使文件存在,C中的fopen()也返回NULL

时间:2015-05-27 07:55:24

标签: c fopen

我正在尝试打开一个目录,然后打开一个名为“YouTubeSign”的文件,目录打开正常,但由于某种原因,即使文件存在,fopen()对文件也会失败,有什么想法吗?

int main(int argc, char **argv)
{
    DIR *pdir = NULL;
    struct dirent *in_file;
    FILE *signature = NULL;
    pdir = opendir(argv[1]);

      if (pdir == NULL)
       {
        printf("could not open directory %s", argv[1]);
        return -1;
      }

    while (in_file = readdir(pdir))
    {
        if (strcmp(in_file->d_name, "YouTubeSign") == 0)
        {
        signature = fopen(in_file->d_name, "r");
        printf("opening youtubesign");
        break;
        }
    }

    if (signature == NULL){
        printf("could not open file ");
        return -1;
    }

3 个答案:

答案 0 :(得分:4)

问题是,您从readdir获取的文件名包含提供给opendir的基本路径。

您必须使用基本路径,路径分隔符和文件名创建完整路径。

答案 1 :(得分:0)

使用由目录名和文件基名组成的fopen()时,必须传递绝对文件名,例如:

char abs_path[PATH_MAX];
// ...
snprintf(abs_path, PATH_MAX, "%s/%s", argv[1], in_file->d_name);
signature = fopen(abs_path, "r");

答案 2 :(得分:-1)

问题是,当您测试此代码时,它将在命令行中运行。这里没有技术。您需要确保该进程使用正确的工作目录。