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

问题描述 投票:1回答:3

我正在尝试打开目录,然后打开一个名为“ 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;
    }
c fopen readdir
3个回答
4
投票

问题是,您从readdir获得的文件名确实[[不是包括提供给opendir的基本路径。

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

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");


-1
投票
问题是,当您测试此代码时,它将从命令行运行。这里没有

技术上缺失。您需要确保该进程使用了​​正确的工作目录。

© www.soinside.com 2019 - 2024. All rights reserved.