分享
三行代码  ›  专栏  ›  技术社区  ›  I'm new

如何在不使用opendir和stat的情况下使用c编程来获取文件夹中扩展名为.txt的文件? - How to get a file exist with an extension of .txt in a folder without using opendir and stat using C programming?

  •  0
  • I'm new  · 技术社区  · 4 周前

    我有一个名为testprogram的文件夹,我想知道文件夹中是否存在名为a.txt的文件。如果不使用opendir和stat函数,而是在c编程中使用fopen,我该怎么做呢?

    我试着从论坛中搜索,那里有很多解决方案,包括directory和stat()函数,因为我不想使用opendir()和stat()。

    1 回复  |  直到 4 周前
        1
  •  1
  •   Jonathan Leffler    4 周前

    将目录名与文件名连接起来,然后尝试 fopen() 文件:

    const char directory[] = "TestProgram";
    const char filename[] = "a.txt";
    char pathname[1024];
    
    snprintf(pathname, sizeof(pathname), "%s/%s", directory, filename);
    
    FILE *fp = fopen(pathname, "r");
    if (fp == NULL)
        printf("File %s does not exist\n", pathname);
    else
    {
        printf("File %s exists and is readable\n", pathname);
        fclose(fp);
    }
    

    你也可以用 access(pathname, F_OK) 测试文件是否存在,尽管在某些特殊情况下它是一个微妙不同的测试。只有当运行的程序是suid时,这些才适用;它测试实际uid(而不是有效uid)或实际gid(或某个辅助gid值而不是有效gid)是否可以访问文件。

    代码应该检查返回值 snprintf() 以确保名称未被截断。当路径名数组那么大而名称那么小时,这是不必要的,但是当您不确定目录和文件名的大小时,您应该进行测试。