C语言实现对文件进行操作的示例详解

 更新时间:2023年04月09日 09:50:41   作者:悲伤的猪大肠9  
这篇文章主要为大家详细介绍了C语言实现对文件进行操作的相关知识,文中的示例代码讲解详细,对我们学习C语言有一定的帮助,需要的可以参考一下

前言

文件操作

在运行程序的时候,此时数据是存放在内存中,当程序退出的时候,程序中的数据自然就不存在了,等下次运行程序的时候,数据又得重新录入,我们可以用文件的办法,把程序中的数据保存下来,只有我们自己选择删除数据的时候,数据才不复存在。 这就涉及到了数据持久化的问题,我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据库等方式。

文件指针

向文件里输出或读取数据需要使用文件指针的形式,每个文件指针可以用来打开一个文件,这个文件指针指向文件的文件信息区。

FILE * 变量名

文件的打开和关闭

文件使用完之后要记得关闭,不让会占用资源,文件关闭掉之后要记得把指针置空以免出现野指针

//打开文件
FILE * fopen ( const char * filename, const char * mode );
//关闭文件
int fclose ( FILE * stream );

文件的打开方式

文件使用方式    文件使用方式    如果指定文件不存在

文件使用方式文件使用方式如果指定文件不存在
“r”(只读)为了输入数据,打开一个已经存在的文本文件出错
“w”(只写)为了输出数据,打开一个文本文件建立一个新的文件
“a”(追加)向文本文件尾添加数据建立一个新的文件
“rb”(只读)为了输入数据,打开一个二进制文件出错
“wb”(只写)为了输出数据,打开一个二进制文件建立一个新的文件
“ab”(追加)向一个二进制文件尾添加数据出错
“r+”(读写)为了读和写,打开一个文本文件出错
“w+”(读写)为了读和写,建议一个新的文件建立一个新的文件
“a+”(读写)打开一个文件,在文件尾进行读写建立一个新的文件
“rb+”(读写)为了读和写打开一个二进制文件出错
“wb+”(读写)为了读和写,新建一个新的二进制文件建立一个新的文件
“ab+”(读写)打开一个二进制文件,在文件尾进行读和写建立一个新的文件

代码示例

#include <stdio.h>
int main()
{
    FILE *pf = fopen("test.txt",'w');
    if(pf==NULL)
    {
        perror("FOPEN:");        //对文件指针进行判断以免返回空指针;
    }
    fput("haohaoxuexi,tiantianxiangshang",pf);
    fclose(pf);
    pf=NULL;            //文件关闭之后把指针置为空,以免出现野指针
}

‘ w ’ 没有文件的情况下会新建一个文件在此程序文件夹下,可以看到文件已经生成了。

文件读写函数

功能函数名适用于
字符输入函数fgetc所有输入流
字符输出函数fputc所有输出流
文本行输入函数fgets所有输入流
文本行输出函数fputs所有输出流
格式化输入函数fscanf所有输入流
格式化输出函数fprintf所有输出流
二进制输入fread文件
二进制输出fwrite文件

二进制方式存储文件

二进制存储在文件内是查看不到具体信息的,要想在文件内查看具体信息要选择其他函数。

二进制形式存储代码示例

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <malloc.h>

struct student
{
    char name[20];
    int age;
    char adress[20];
}*s1;
int main()
{
    s1 = (struct student*)malloc(sizeof(struct student));
    if (s1 == NULL)
    {
        perror("malloc:");
        return 0;
    }
    FILE* pf = fopen("test.txt", "wb");
    if (pf == NULL)
    {
        perror("FOPEN:");   //对文件指针进行判断以免返回空指针;
        return 0;
    }
    strcpy(s1->name, "陈独秀");
    s1->age = 18;
    strcpy(s1->adress,"东城区箭杆胡同20号");
    fwrite(s1, sizeof(struct student), 1, pf);
    fclose(pf);
    pf = NULL;
}

结果:

可以看到文件已经出现了部分乱码,还能看到文字的原因是文本文件打开的时候默认以一种编码形式打开,将本来存到文本里的二进制信息进行了解码。

对文件进行拷贝

这里要注意\需要再用\转义,否则是转义字符的意思

  • 先打开要拷贝的文件,再打开新建拷贝后的文件进行拷贝
  • 如果是图片视频等文件,要使用二进制的方式打开、读取和存储,否则文件会损坏
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <malloc.h>

int main()
{
    FILE* pfr = fopen("C:\\Users\\22763\\Pictures\\Saved Pictures\\QQ图片20211001085735.jpg", "rb"); 		//要拷贝的文件目录
    FILE* pfw = fopen("CopyPic.jpg", "wb");
    char temp;
    if (pfw == NULL||pfr==NULL)
    {
        perror("FOPEN:");   //对文件指针进行判断以免返回空指针;
        return 0;
    }
    while (fread(&temp, sizeof(char), 1, pfr))
    {
        fwrite(&temp, sizeof(char), 1, pfw);
    }
    fclose(pfw);
    fclose(pfr);
    pfw = NULL;
    pfr = NULL;
}

文件随机读写函数

这三个函数并不常用,所有只要知道有这三个函数就行了以及他们是干什么的就可以了,用的时候再查。

fseek

int fseek(FILE stream,long offset,int origin );

根据文件指针的位置和偏移量来定位文件指针。

ftell

long ftell( FILE *stream );

返回文件指针相对于起始位置的偏移量

rewind

void rewind( FILE *stream );

让文件指针的位置回到文件的起始位置

文件缓冲区

文件在读或者写的时候存在一个文件缓冲区,因为与磁盘交互,需要一定时间(尽管很短),但是为了尽可能的节省时间,系统自动地在内存中设立了文件缓冲区,等攒够一定的数据,或者程序结束,一起读或写,这样大大提高读写速度,避免每个字符都要进行一次读或写。

以上就是C语言实现对文件进行操作的示例详解的详细内容,更多关于C语言文件操作的资料请关注脚本之家其它相关文章!

相关文章

  • 详解C语言实现推箱子的基本功能(2)

    详解C语言实现推箱子的基本功能(2)

    这篇文章主要为大家详细介绍了C语言实现推箱子的基本功能的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • C/C++混合编程之extern “C”的使用示例

    C/C++混合编程之extern “C”的使用示例

    这篇文章主要给大家介绍了关于C/C++混合编程之extern “C”使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • C++11显示类型转换的优点

    C++11显示类型转换的优点

    这篇文章主要介绍了C++11显示类型转换的优点,帮助大家更好的理解和学习c++,感兴趣的朋友可以了解下
    2020-08-08
  • C++代码实现网络Ping功能

    C++代码实现网络Ping功能

    这篇文章主要介绍了C++代码实现网络Ping功能,Ping命令被送到本地计算机的IP软件,该命令永不退出该计算机,本文给大家介绍的非常详细,需要的朋友参考下吧
    2021-08-08
  • 基于C语言实现计算生辰八字五行的示例详解

    基于C语言实现计算生辰八字五行的示例详解

    生辰八字,简称八字,是指一个人出生时的干支历日期;年月日时共四柱干支,每柱两字,合共八个字。这篇文章主要介绍了C语言实现计算生辰八字五行的示例代码,需要的可以参考一下
    2023-03-03
  • c语言实现奇偶排序算法

    c语言实现奇偶排序算法

    这篇文章主要介绍了c语言实现奇偶排序算法,有需要的朋友可以参考一下
    2013-12-12
  • 浅析C++中的间接宏函数

    浅析C++中的间接宏函数

    这篇文章主要介绍了C++中的间接宏函数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • 详解C++编程中的主表达式与后缀表达式编写基础

    详解C++编程中的主表达式与后缀表达式编写基础

    这篇文章主要介绍了C++编程中的主表达式与后缀表达式编写基础,是C++入门学习中的基础知识,需要的朋友可以参考下
    2016-01-01
  • C语言调用摄像头实现生成yuv未压缩图片

    C语言调用摄像头实现生成yuv未压缩图片

    这篇文章主要为大家详细介绍了C语言如何调用摄像头实现生成yuv未压缩图片,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以参考一下
    2023-11-11
  • OpenCV实现Sobel边缘检测的示例

    OpenCV实现Sobel边缘检测的示例

    本文主要介绍了OpenCV实现Sobel边缘检测的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08

最新评论