C檢查文件是否存在
目標(biāo)
在本文章中,您將學(xué)習(xí)如何開發(fā)一個C文件是否存在的函數(shù),該函數(shù)使用各種C標(biāo)準(zhǔn)庫函數(shù)檢查文件是否存在。
有時,您希望在讀取或?qū)懭胛募皺z查文件是否存在。但是,C語言沒有提供任何標(biāo)準(zhǔn)函數(shù)來檢查文件是否存在。
幸運的是,您可以使用標(biāo)準(zhǔn)庫中的其他函數(shù)來開發(fā)自己的函數(shù),檢查文件是否存在。我們將用來檢查文件是否存在的函數(shù)有:
- fopen()
- stat()
- access()
使用fopen()函數(shù)檢查文件是否存在
在第一種方法中,您將嘗試使用fopen()函數(shù)從文件中讀取數(shù)據(jù)。如果可以從文件中讀取數(shù)據(jù),則表示文件存在,否則不存在。
下面演示了如何使用fopen()函數(shù)來檢查文件是否存在:
#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); // 關(guān)閉文件
}
return is_exist;
}
int main()
{
char *filename = "readme.txt";
if (file_exists(filename))
printf("文件 %s 存在", filename);
else
printf("文件 %s 不存在。", filename);
return 0;
}
該函數(shù)接受一個文件名,如果文件存在則返回true。否則,返回0。
使用stat()函數(shù)檢查文件是否存在
函數(shù)的作用是:讀取文件的所有屬性,包括文件大小、創(chuàng)建日期和修改日期。如果文件不存在,stat()函數(shù)返回-1,否則返回0。stat()函數(shù)包含在ys/stat.h標(biāo)準(zhǔn)庫中。
下面演示如何使用stat()函數(shù)來檢查文件是否存在:
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()函數(shù)檢查文件是否存在
函數(shù)的作用是:檢查一個文件是否可以被用戶讀/寫/執(zhí)行。它可以用來檢查文件是否存在:
int access(const char *filename, int how)
*filename是要檢查的文件的路徑。how標(biāo)志的有效值是
- R_OK -測試讀權(quán)限
- W_OK -測試寫權(quán)限
- X_OK—測試執(zhí)行權(quán)限
- F_OK—測試文件是否存在。
如果允許訪問,則access()函數(shù)返回0,否則返回-1。
下面的程序演示了如何使用access()函數(shù)來檢查文件的存在性:
#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;
}
總結(jié)
- 使用fopen()函數(shù)通過讀取文件來檢查文件是否存在。
- 使用stat()函數(shù)通過從文件中讀取屬性來檢查文件是否存在。
- 使用帶有F_OK標(biāo)志的access()函數(shù)來檢查文件是否存在。