文件操作

本文介绍了C语言中的文件操作,包括文件的概念、流的分类以及文本和二进制文件的区别。重点讲解了文件指针的类型及其应用,如文件的打开与关闭、读取与写入,以及如何通过fopen、fclose、feof和fseek等函数进行文件定位和状态检查。此外,还讨论了文件路径和打开文件可能出现的问题。
摘要由CSDN通过智能技术生成

一、文件

  1. 什么是文件?
    文件是计算机上以硬盘(外部介质)作为载体的信息集合。

  2. 什么是流?
    可以从不同的角度对流进行分类:
    1 处理的数据单位不同,可分为:字符流,字节流
    2 数据流方向不同,可分为:输入流,输出流
    3 功能不同,可分为:节点流,处理流

操作系统是以文件为单位对数据进行管理的,输入输出是数据传送的过程,数据如流水一样从一处流向另一处,因此常将输入输出形象地称为流(stream),即输入输出流。

C语言把文件看作是一个字符(字节)的序列,即由一个一个字符(字节)的数据顺序组成。一个输入输出流就是一个字节流或二进制流

  1. 文件分类
    文件分为二级制文本和文本文件。
    文本文件:是以字符方式呈现出来的,每个字符占一个字节,而计算机中又是以ASCII码来识别。(字符->ASCII->二进制数)
    二进制文件:二进制文件存储数据过程中都是二进制所以不需要转换,效率较高。
    例如123(二进制文件为0111 1011占一个字节)(文本文件为‘1’‘2’‘3’占3个字节)
    两种文件的比较:
    ASCII文件便于对字符进行逐个处理,也便于输出字符。但一般占存储空间较多,而且要花费转换时间。
    二进制文件可以节省外部存储空间和转换时间,但是一个字节并不对眼一个字符,不能直接输出字符形式(可以用与加密)
  2. ANS I C标准采用“缓冲文件系统”处理文件。

缓冲文件系统:系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。
从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘去。

在这里插入图片描述

二、文件指针

1. 文件指针有文件位置指针和文件指针2种。

在这里插入图片描述文件指针:是指向文件的指针。
文件位置指针:是用来遍历数据的。

2. 文件指针的应用

1. 文件的打开和关闭

文件指针就像动态内存分布一样,我们自己申请一个空间,就要自己去对这个申请的空间进行释放。

fopen()打开文件函数,函数行参包含(“路径和文件名”,“操作条件”),相对于的有关闭函数fclose(文件名)
注意

fopen()与fopen_s()是有差别的fopen_s(二级文件指针,“路径和文件名”,“操作条件”)

注意:路径的分类:
1.相对路径:是相对于源文件的目录就在当前文件下用"./某某文件.类型"
2.绝对路径:是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。例如"C:/xxx/xxx.xx"
对于‘\’来说单个\是代表转义符号,要输出 \ 就必须要这“\\”
/与‘\’意思一样
操作条件
“r” (只读)打开一个文本文件将内容读取 文件必须存在
“w” (只写)为写入内容打开一个文本文件 存在则清除,不存在则创建
“a” (追加)向文本文件尾增加数据 文件必须存在
“rb” (只读)为输入打开一个二进制文件 文件必须存在
“wb” (只写)为输出打开一个二进制文件
“ab” (追加)向二进制文件尾增加数据
还可以在方式后面加上+号,表示可读可写,比如r+ 为可读/可写
打开文件错误的原因
主要有四种
1.用”r”只读的方式打开一个不存在的文件
2.文件路径错误
3.文件名非法
4.权限不够:以管理员身份运行该程序即可

int main()
{
   
	FILE *pFlie = fopen("./file.txt","w+");//fopen返回值为文件指针 
	               //(“路径和文件名”,“操作条件”)
	if (pFlie == NULL)		 //判断是否打开成功
	{
   
		perror("错误原因: ");//显示什么错误
		return 0;
	}
	else
	{
   
		printf("ok");
	}


	FILE *pnew; 
	int ret=fopen_s(&pnew,"./new.txt","w");//返回值为int,(传二级指针,“路径和文件名”,“操作条件”)
	if (ret)                              //判断是否打开成功
	{
   
		perror(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值