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()函数来检查文件是否存在。