首页 > 其他分享 >C语言文件操作详细易懂版

C语言文件操作详细易懂版

时间:2024-08-21 15:51:24浏览次数:14  
标签:fp 文件 函数 字符 C语言 详细 格式 易懂 指针

 本期博客将介绍在C语言中进行文件操作的常见函数和基本方法,包括文件的基本概念、文件的打开和关闭、文件的读写操作、文件定位、文件检测等内容。


目录

一、文件的概念

二、文件的分类

1.文本文件:

2.二进制文件:

三、文件类型指针

四、文件的打开操作

五、文件的关闭操作

六、文件的读写操作

1、字符读写函数

1.1fputc()函数

1.2fgetc()函数

1.3 feof()函数

2、字符串读写函数

2.1 fputs()函数

2.3 fgets()函数

3、格式化读写函数

3.1 fprintf()函数

3.2 fscanf()函数

4、数据块读写函数

4.1 fwrite()函数

4.2 fread()函数

 七、文件定位函数

1.重置文件函数rewind()

2.设置文件指针位置函数fseek()

3.取当前位置函数

八、文件检测函数

1.文件读写错误检测函数ferror()函数

2.清除文件错误标志函数clearerr()函数


一、文件的概念

文件是指存储在外部存储介质上具有名字的一组相关数据的集合。

C语言把文件中的数据看作一个字节序列,读写文件时形成一个输入输出的字节流。在“stdio.h"头文件中定义了三种标准流,其文件指针和默认连接外设如下:

C语言中的标准流
标准流文件指针默认连接外设
标准输入stdin

键盘

标准输出stdout显示器屏幕
标准错误输出stderr显示器屏幕

二、文件的分类

1.文本文件:

是以字符的ASCII码值存储与编码的文件,其内容就是字符,每个字符占一个字节,每个字节存储相应字符的ASCII码。(常用txt作为文件拓展名)

2.二进制文件:

以数据的二进制编码进行存储的文件。

三、文件类型指针

系统为每个正在使用的文件的内存中开辟了一个相应的文件信息区,存放文件有关信息。C语言将这些信息保存在一个结构体变量中,取名FILE。

在vs2022环境下FILE类型定义如下

struct _iobuf {
	char* ptr;
	int _cnt;
	char* _base;
	int _flag;
	int _file;
	int _charbuf;
	int _bufsiz;
	char* _tmpfname;
};
typedef struct _iobuf FILE;

可以直接利用FILE类型定义一个指针变量

FILE*fp;

fp是一个指向FILE类型的指针变量,称为文件指针,fp指向文件的信息区,使fp与该文件关联。 

四、文件的打开操作

fopen()函数,其一般格式如下:

FILE*fp;

fp=fopen(文件名,文件的打开方式); 

 如果打开成功则返回指向该文件的指针,否则返回空指针NULL。每次打开文件都应该判断打开成功与否。例如:

FILE*fp;
fp=fopen("myfile.txt","r");
if(fp==NULL)
{
printf("file open error!");
exit(0);
}

其中打开方式简单总结如下

t文本文件
b二进制文件
r从文件中读取数据
w向文件写数据
a文件末尾加数据
+对文件可读可写

常见的打开方式有:

五、文件的关闭操作

fclose(文件指针)

文件关闭成功返回0;否则返回非0,关闭失败会导致数据丢失、文件破坏等随机错误。

六、文件的读写操作

1、字符读写函数

1.1 fputc()函数

用于向指定文件写入一个字符,格式如下: 

fputc(字符,文件指针); 

#include<stdio.h>
#include<stdlib.h>
int main()
{
	FILE* fp;
	char ch;
	fp = fopen("myGreeting.txt", "w");
	if (fp == NULL)
	{
		printf("file open error\n");
		exit(0);
	}
	printf("please input a string:\n");
	ch = getchar();
	while (ch != '\n')
	{
		fputc(ch, fp);
		ch = getchar();
	}
	fclose(fp);
	return 0;
}

 在当前目录下创建一个文本文件myGreeting.txt内容如下

1.2 fgetc()函数

用于从指定文件中读取一个字符,格式如下:

字符变量=fgetc(文件指针); 

 从文件指针所指向的文件中读取一个字符赋给字符变量,并将文件位置指针指向下一个字符。成功返回读取字符的ASCII码,出错或读到文件结束符返回EOF。举例:

char ch;
ch=fgetc(fp);

1.3 feof()函数

判断是否到文件尾可用ch!=EOF(仅适用于文本文件),还可以用feof函数。

feof(文件指针) 

功能:当文件位置指针指向文件结束符时,返回非0值,否则返回0. 

在程序的循环中,"!feof(fp)" 判断是否到文件末尾,若已到结束循环,否则继续读取字符并在屏幕上显示。

2、字符串读写函数

2.1 fputs()函数

用于向制定文件写入一个字符串,格式如下:

fputs(字符串,文件指针);

注意:写入成功返回0,否则返回EOF;字符串结束标志'\0'不写入文件。

2.3 fgets()函数

用于从指定文件中读取一个字符串,格式如下:

fputc(字符数组名,n,文件指针);

 例如:

char s[10];
fgets(s,10,fp);

说明:1.字符数组名可用字符型指针变量代替。

2.最多读取n-1个字符,在读入最后一个字符后加上字符串结束标志'\0'。

3.在读满字符前遇到换行符或文件末尾EOF,读取结束。

3、格式化读写函数

3.1 fprintf()函数

用于按指定格式向文件中写入数据,格式如下:
fprintf(文件指针,格式控制字符串,输出列表); 

功能:输出列表中的各变量或常量, 依次按格式控制字符串中控制符的格式写入文件指针所指向的文件中。成功返回值为写入文件中数据的字节数,否则返回EOF。

//用于将int类型变量n分别按%d,%x的格式写入fp所指向的文件中
int n=100;
fprintf(fp,"%d%x",n,n);

3.2 fscanf()函数

用于按指定格式从文件中读取数据,格式如下:

fcanf(文件指针,格式控制字符串,输入列表); 

功能:从文件指针所指向的文件中按格式控制字符串中控制符读取相应数据赋给输入列表中对应的变量。成功返回已读取数据个数,否则返回EOF。 

int x,y;
fscanf(fp,"%d %x",&x,&y);

4、数据块读写函数

4.1 fwrite()函数

用于将数据写到文件中,格式如下:

 fwrite(buffer,size,count,fp);

功能:将从以buffer为首地址的内存中取出count次数据块(每次size个字节)写入fp所指向的文件中,如写入成功返回值为写入的数据块的个数,否则返回0。

//举例
int a[2]={100,200};
fwrite(a,4,2,fp);

4.2 fread()函数

用于从指定文件中读取一个指定字节的数据块,格式如下:

fread(buffer,size,count,fp);

功能:从fp指向的文件中读取count 次数据块(每次size个字节),并存储到Buffer所指向的存储空间中。如读取成功返回值为数据块的个数,否则返回0。

//举例
int b[2];
fread(b,4,2,fp);

 七、文件定位函数

1.重置文件函数rewind()

对文件进行读写操作后文件的位置指针会移动,可用rewind()函数实现,格式如下:

rewind(文件指针);

注意:该函数没有返回值。

2.设置文件指针位置函数fseek()

fseek()函数, 用于将文件的位置指针移动到指定的位置,格式如下:

fseek(文件指针,位移量,起始位置); 

说明:① fseek ()函数表示以"起始位置"为基点,将文件的位置指针向前或向后移动指定
的"位移量"。
②起始位置:既可以用符号常量表示,也可以用数字0、1、2表示,其含义如下:

起始位置的表示方法
起始位置符号常量数值
文件开始SEEK_SET0
当前位置SEEK_CUR1
文件末尾SEEK_END2


③位移量:表示移动的字节数。当其值为正数时,表示位置指针从"起始位置"开始向文件尾方向移动;当其值为负数时,表示位置指针从"起始位置"开始向文件头方向移动。位移量是 long 型数据,用数字表示时,可在数字 面加上后缀" L "。
④ fseek ()函数一般用于二进制文件。

//例如,假设文件指针 pf 指向二进制文件,以下是调用 fseek ()函数的几个例子:
 fseek ( fp ,4L,0);//将位置指针移到距离文件头4字节处
 fseek ( fp ,40L,1);//将位置指针移到当前位置后面40字节处
 fseek ( fp ,-20L,2);//将位置指针从文件末尾处向文件头方向移动20字节

3.取当前位置函数

ftell ()函数用于获取文件位置指针的当前位置,其一般格式如下:


ftell (文件指针);


功能:获取文件指针所指向文件的当前位置指针的值,用相对于文件开头的位如果操作成功,则函数返回当前位置指针的值;如果出错,则返回﹣1L。

//例如,以下语句通过 fseek ()函数和 ftell ()函数求出文件大小:
fseek ( fp , OL , SEEK _ END );//把文件位置指针移到文件末尾
filelen=ftell(fp)//求出文件中的字节

八、文件检测函数

1.文件读写错误检测函数ferror()函数

在调用文件输入输出函数进行读写操作时,如果出现错误,除了可以检查这些函数的返回值外,还可以调用 ferror ()函数来确定具体出错的原因,其一般格式如下


 ferror (文件指针);

 
功能:检测文件指针所指向文件在调用文件读写函数进行读写操作时是否出错,如果函数的返回值为0,表示未出错;如果返回非0值,表示出错,通过具体的错误代码值可以判别出错的原因。
注意:调用 fopen ()函数时, ferror ()函数的初始值自动置为0。


2.清除文件错误标志函数clearerr()函数


 clearerr ()函数用于将文件错误标志和文件结束标志置为0,其一般格式如下:


 clearerr (文件指针);


如果在调用一个文件读写函数时出现错误,则 ferror ( fp )函数值为一个非0值,通过调用 clearerr ( fp )可以清除错误标志,当再次调用 ferror ( fp )时,该函数将返回0。
 


本期博客对C语言中文件操作进行了全方位的简单讲解,可能会有误区,还请各位看客不吝赐教。

如果本博客对您有帮助的话请多多关注,博主持续更新中~

 



 

标签:fp,文件,函数,字符,C语言,详细,格式,易懂,指针
From: https://blog.csdn.net/Jasmine5606/article/details/141337402

相关文章

  • Java面试八股文 非常详细了!!!
    准备篇Java程序员的面试过程——总分结构凡事预则立,不预则废应届生该如何找到合适的练手项目Redis篇面试考点——一、缓存面试官:什么是缓存穿透 ?怎么解决?候选人:(穿透无中生有Key,布隆过滤NULL隔离)嗯~~,我想一下缓存穿透是指查询一个一定不存在的数据,如果从存储......
  • 【python】Python实现XGBoost算法的详细理论讲解与应用实战
    ✨✨欢迎大家来到景天科技苑✨✨......
  • Rocky 8.10安装流程步骤详细教程
    Rocky8.10安装流程步骤详细教程1.Rocky8.10安装2.登录3.配置修改3.1打开命令行窗口3.2网卡配置3.3修改网卡名3.4配置镜像源3.5删除网卡多余内容3.5.1删除virbr03.5.2删除altnameenp3s03.5.3删除ipv63.5.4修改ip地址(这步没有需要可以忽略)3.6升级opens......
  • Spring:DI思想的详细图解
    什么是DIDI就是依赖注入,,简单来讲,其实就是,把IoC容器中的bean对象取出来直接放到某个类的属性中,不再需要我们自己手的的new对象。例如下面代码,在Controller包中创建了一个SayHiContreoller类,在ServiceDemo包中创建了一个SayHiService类,现在,想要在SayHiControll......
  • 大模型备案流程最详细说明【评估测试题+附件】
    2024年3月1日,我国通过了《生成式人工智能服务安全基本要求》(以下简称《AIGC安全要求》),这是目前我国第一部有关AIGC服务安全性方面的技术性指导文件,对语料安全、模型安全、安全措施、词库/题库要求、安全评估等方面提出了具体规范和要求。(一)适用主体《AIGC安全要求》的适用主......
  • 解决《帝国时代3》granny2.dll丢失问题的终极指南:详细步骤教你快速解决游戏启动难题
    《帝国时代3》是一款备受玩家喜爱的即时战略游戏,但有时玩家可能会遇到一些技术问题,比如在尝试运行游戏时出现“找不到granny2.dll”或“granny2.dll缺失”的错误提示。这种情况通常意味着游戏所需的某个动态链接库(DLL)文件损坏或丢失,从而导致游戏无法正常启动。一、原因分析D......
  • [C语言]-基础知识点梳理-动态内存管理
    前言各位师傅大家好,我是qmx_07,今天给大家讲解动态内存管理的相关知识,下一章节更新文件管理部分的知识点为什么要进行动态内存分配intval=20;//在栈空间上开辟四个字节chararr[10]={0};//在栈空间上开辟10个字节的连续空间上述的开辟空间的⽅式有两个特点:空......
  • 基于多模态知识图谱的多模态推理-MR-MKG(非常详细)零基础入门到精通,收藏这一篇就够了
    MR-MKG论文中提出了一种新的多模态推理方法,即利用多模态知识图(MultimodalKnowledgeGraph,MMKG)进行多模态推理的方法。这种方法旨在通过从MMKG中学习,扩展大型语言模型(LLMs)的多模态知识。1三个模块MR-MKG方法主要包含以下三个模块,分别处理不同的模态信息:文本编码(Lan......
  • 多模态大型语言模型(MLLM)综述(非常详细)零基础入门到精通, 收藏这一篇就够了
    ASurveyonMultimodalLargeLanguageModels多模态大型语言模型(MLLM)综述摘要—最近,以GPT-4V为代表的多模态大型语言模型(MLLM)已成为新兴的研究热点,它使用强大的大型语言模型(LLMs)作为“大脑”来执行多模态任务。MLLM出人意料的涌现能力,如基于图像编写故事和无需OCR的数学......
  • 应急响应/逆向工具箱(非常详细)零基础入门到精通,收藏这一篇就够了
    介绍OpenArk是一款Windows平台上的开源Ark工具,Ark是Anti-Rootkit(对抗恶意程序)的简写,目标成为逆向工程师、编程人员的工具,同时也能为那些希望查出操作系统中隐藏恶意软件的用户服务。程序:独立的exe,无DLL依赖,支持32位、64位。支持系统:WindowsXP…Win7…Win10…......