迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C语言 >

C 语言中如何检查文件是否存在

作者:迹忆客 最近更新:2023/03/28 浏览次数:

本文介绍了用 C 语言检查文件是否存在的方法,检查文件是否存在的方法是尝试以读取或写入模式打开文件。本程序是以读取模式打开一个文件的。


fopen() 检查 C 语言中文件是否存在的函数

#include<stdio.h>
int main(void)
{
    FILE *file;
    
    if (file = fopen("demo.txt", "r")) 
    {
        fclose(file);
        printf("file exists");
    }
    else
    {
        printf("file doesn't exist");
    }
    
    return 0;
}

输出:

file exists

这里的文件名是 demo.txt。C 程序和 demo.txt 文件在同一个目录下。所以输出的结果是 file exists

如果 C 程序位置和文件位置不同,我们必须指定文件的完整路径。

我们可以创建一个用户自定义函数,检查文件是否存在。下面是带有用户自定义函数的程序。

#include<stdio.h>
int checkIfFileExists(const char *filename);
int main(void)
{
    if(checkIfFileExists("demo.txt"))
    {
        printf("file exists");
    }
    else
    {
        printf("file does not exists");
    }
}

int checkIfFileExists(const char * filename)
{
    FILE *file;
    if (file = fopen(filename, "r"))
    {
        fclose(file);
        return 1;
    }

    return 0;
}

如果 demo.txt 文件和 C 程序的位置相同,程序将打印 file exists。如果 C 程序和文件名的位置不同,我们必须指定文件的完整路径。


stat() 函数检查 C 程序中的文件是否存在

我们使用 stat() 函数读取文件的属性,而不是从文件中读取数据。如果操作成功,该函数将返回 0;否则,将返回 -1,如果文件不存在。

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

int checkIfFileExists(const char *filename);

int main(void)
{
    if(checkIfFileExists("demo.txt"))
    {
        printf("file exists");
    }
    else
    {
        printf("file does not exists");
    }

}

int checkIfFileExists(const char* filename){
    struct stat buffer;
    int exist = stat(filename,&buffer);
    if(exist == 0)
        return 1;
    else  
        return 0;
}

如果 demo.txt 文件和 C 程序的位置相同,程序将打印 file exists。如果 C 程序和文件名的位置不同,我们必须指定文件的完整路径。


access() 检查 C 程序中文件是否存在的函数

检查文件是否存在的另一种方法是使用 access 函数。unistd.h 头文件中有一个函数 access 来检查文件是否存在。

我们可以用 R_OK 表示读权限,W_OK 表示写权限,X_OK 表示执行权限。我们可以将它们组合成 R_OK|W_OK 来读取和写入权限。

#include<stdio.h>
#include<unistd.h>
int main(void)
{
    if( access( "C:\\TEMP\\demo.txt", F_OK ) != -1)
    {
        printf("file is found");
    }
    else
    {
    printf("file is not found");
    }
    return 0;
}

输出的结果是

file is found

这里,C:TEMPdemo.txt 是文件位置。如果文件存在,则打印 file is found;否则,打印 file is not found。程序位置和 demo.txt 文件的位置相同。否则,我们必须指定文件的位置。对于 Linux 操作系统来说,stat()access() 函数是一个不错的选择。

另一种使用 access 函数的方法如下。

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

void checkIfFileExists(const char *fileName);

int main (void) {
    char *fileName = "C:\\TEMP\\demo.txt";

    checkIfFileExists(fileName);
    return 0;

}

void checkIfFileExists(const char *fileName){

    if(!access(fileName, F_OK )){
        printf("The File %s was Found\n",fileName);
    }else{
        printf("The File %s not Found\n",fileName);
    }
    
    if(!access(fileName, R_OK )){
        printf("The File %s can be read\n",fileName);
    }else{
        printf("The File %s cannot be read\n",fileName);
    }
    
    if(!access( fileName, W_OK )){
        printf("The File %s  can be Edited\n",fileName);
    }else{
        printf("The File %s  cannot be Edited\n",fileName);
    }
    
    if(!access( fileName, X_OK )){
        printf("The File %s is an Executable\n",fileName);
    }else{
        printf("The File %s is not an Executable\n",fileName);
    }

}

输出:

The file C:\TEMP\demo.txt was found
The file C:\TEMP\demo.txt can be read
The file C:\TEMP\demo.txt can be Edited
The file C:\TEMP\demo.txt is an executable

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C 语言中使用 typedef enum

发布时间:2023/05/07 浏览次数:181 分类:C语言

本文介绍了如何在 C 语言中使用 typedef enum。使用 enum 在 C 语言中定义命名整数常量 enum 关键字定义了一种叫做枚举的特殊类型。

C 语言中的静态变量

发布时间:2023/05/07 浏览次数:151 分类:C语言

本文介绍了如何在 C 语言中使用静态变量。在 C 语言中使用 static 变量在函数调用之间保存变量值

C 语言中生成随机数

发布时间:2023/05/07 浏览次数:64 分类:C语言

本文演示了如何在 C 语言中生成随机数。使用 rand 和 srand 函数在 C 语言中生成随机数

C 语言中的 i++ 与++i

发布时间:2023/05/07 浏览次数:83 分类:C语言

本文演示了如何在 C 语言中使用前缀增量与后缀增量运算符。C 语言中++i 和 i++ 记号的主要区别

C 语言中获取当前工作目录

发布时间:2023/05/07 浏览次数:182 分类:C语言

本文演示了如何在 C 语言中获取当前工作目录。使用 getcwd 函数获取当前工作目录的方法

C 语言中的位掩码

发布时间:2023/05/07 浏览次数:126 分类:C语言

本文介绍了如何在 C 语言中使用位掩码。使用 struct 关键字在 C 语言中定义位掩码数据

C 语言中的排序函数

发布时间:2023/05/07 浏览次数:181 分类:C语言

本文演示了如何在 C 语言中使用标准库排序函数。使用 qsort 函数对 C 语言中的整数数组进行排序

C 语言中的 extern 关键字

发布时间:2023/05/07 浏览次数:114 分类:C语言

本文介绍了如何在 C 语言中使用 extern 关键字。C 语言中使用 extern 关键字来声明一个在其他文件中定义的变量

C 语言中的 #ifndef

发布时间:2023/05/07 浏览次数:186 分类:C语言

本文介绍了如何在 C 语言中使用 ifndef。在 C 语言中使用 ifndef 保护头文件不被多次包含 C 语言中的头文件用于定义同名源文件中实现的函数的接口。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便