C 语言中,检查文件是否存在是文件操作中常见的需求,尤其在程序运行时需要读取、写入或修改文件时。C 语言没有直接的 file_exists() 函数,必须使用其他方法来判断文件是否存在。不同的操作系统和平台提供了不同的函数和方法,常见的有 access()、fopen() 等。

1、使用 access() 函数(推荐方法)

在 POSIX 系统(如 Linux、MacOS)中,access() 函数是检查文件存在与否的标准方法。它检查文件的可访问性,包括读取、写入或执行权限。要检查文件是否存在,只需要检查 access() 返回值。

#include <stdio.h>
#include <unistd.h>  // access()
#include <sys/types.h>
#include <sys/stat.h>

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

    // 检查文件是否存在
    if (access(filename, F_OK) != -1) {
        printf("File exists!\n");
    } else {
        printf("File does not exist!\n");
    }

    return 0;
}

2、使用 fopen() 函数

使用 fopen() 函数尝试打开文件并检查返回值。虽然 fopen() 更多用于文件的读写操作,但它也可以用于检查文件是否存在。

#include <stdio.h>

int main() {
    const char *filename = "example.txt";
    FILE *file = fopen(filename, "r");

    if (file) {
        printf("File exists!\n");
        fclose(file);  // 文件打开成功后,记得关闭文件
    } else {
        printf("File does not exist!\n");
    }

    return 0;
}

3、使用 stat() 函数

在 POSIX 系统中,stat() 函数也可以用来检查文件是否存在。它获取文件的状态信息,如果文件存在,stat() 返回 0,否则返回 -1。

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

int main() {
    const char *filename = "example.txt";
    struct stat buffer;

    if (stat(filename, &buffer) == 0) {
        printf("File exists!\n");
    } else {
        printf("File does not exist!\n");
    }

    return 0;
}

4、使用 open() 函数(Linux/Unix)

在低级别的文件操作中,可以使用 open() 函数来检查文件是否存在。这个方法适用于文件的打开和访问。

#include <fcntl.h>
#include <unistd.h>

int main() {
    const char *filename = "example.txt";
    int file = open(filename, O_RDONLY);

    if (file != -1) {
        printf("File exists!\n");
        close(file);  // 文件打开成功后,记得关闭文件
    } else {
        printf("File does not exist!\n");
    }

    return 0;
}