第十二章:文件输入/输出-4检查文件是否存在

C检查文件是否存在

目标

在本文章中,您将学习如何开发一个C文件是否存在的函数,该函数使用各种C标准库函数检查文件是否存在。

有时,您希望在读取或写入文件之前检查文件是否存在。但是,C语言没有提供任何标准函数来检查文件是否存在。

幸运的是,您可以使用标准库中的其他函数来开发自己的函数,检查文件是否存在。我们将用来检查文件是否存在的函数有:

  • fopen()
  • stat()
  • access()

使用fopen()函数检查文件是否存在

在第一种方法中,您将尝试使用fopen()函数从文件中读取数据。如果可以从文件中读取数据,则表示文件存在,否则不存在。

下面演示了如何使用fopen()函数来检查文件是否存在:

#include <stdio.h>
#include <stdbool.h>

// 如果由filename指定的文件存在返回真
bool file_exists(const char *filename)
{
    FILE *fp = fopen(filename, "r");
    bool is_exist = false;
    if (fp != NULL)
    {
        is_exist = true;
        fclose(fp); // 关闭文件
    }
    return is_exist;
}

int main()
{
    char *filename = "readme.txt";

    if (file_exists(filename))
        printf("文件 %s 存在", filename);
    else
        printf("文件 %s 不存在。", filename);

    return 0;
}

该函数接受一个文件名,如果文件存在则返回true。否则,返回0。

使用stat()函数检查文件是否存在

函数的作用是:读取文件的所有属性,包括文件大小、创建日期和修改日期。如果文件不存在,stat()函数返回-1,否则返回0。stat()函数包含在ys/stat.h标准库中。

下面演示如何使用stat()函数来检查文件是否存在:

include <stdio.h>
#include <sys/stat.h>
#include <stdbool.h>

// 返回真如果由filename指定的文件存在
bool file_exists(const char *filename)
{
    struct stat buffer;
    return stat(filename, &buffer) == 0 ? true : false;
}

int main()
{
    char *filename = "readme.txt";

    if (file_exists(filename))
        printf("文件 %s 存在", filename);
    else
        printf("文件 %s 不存在。", filename);

    return 0;
}

使用access()函数检查文件是否存在

函数的作用是:检查一个文件是否可以被用户读/写/执行。它可以用来检查文件是否存在:

int access(const char *filename, int how)

*filename是要检查的文件的路径。how标志的有效值是

  • R_OK -测试读权限
  • W_OK -测试写权限
  • X_OK—测试执行权限
  • F_OK—测试文件是否存在。
    如果允许访问,则access()函数返回0,否则返回-1。

下面的程序演示了如何使用access()函数来检查文件的存在性:

#include <stdio.h>
#include <unistd.h>
#include <stdbool.h>

// 返回真如果由filename指定的文件存在
bool file_exists(const char *filename)
{
    return access(filename, F_OK) == 0;
}

int main()
{
    char *filename = "readme.txt";

    if (file_exists(filename))
        printf("文件 %s 存在", filename);
    else
        printf("文件 %s 不存在。", filename);

    return 0;
}

总结

  • 使用fopen()函数通过读取文件来检查文件是否存在。
  • 使用stat()函数通过从文件中读取属性来检查文件是否存在。
  • 使用带有F_OK标志的access()函数来检查文件是否存在。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容