C语言:文件(写入,读取)

磁盘文件分为文本文件和二进制文件。

区分二者很简单,我们可以选定一个文件,以记事本打开,如果其中的内容你能看懂,他就是一个文本文件,相反,如果是一堆你看不懂的东西,那他就是二进制文件。

常见的文本文件有.c .txt .cpp .h等。

要使用文件我们首先要打开文件:

cpp 复制代码
#include<stdio.h>
FILE* fopen(const char* filename,const char* mode);
//filename:需打开的文件名(路径)  mode:打开文件的模式设置
//此方式不安全,安全方法在下方例子中

若成功打开会返回文件指针,若失败则返回NULL。

mode有:

r:只读取,若文件不存在,fopen调用失败

w:写入,若文件不存在则创建,若文件存在则清空

a:追加写入,若文件不存在则创建

r+:既能读又能写,文件必须存在

w+:既能读又能写,若文件不存在则创建,若文件存在则清空

a+:既能读又能写,若文件不存在则创建

二进制文件的打开方式要在以上这些方式后加一个b

如rb,wb,ab,rb+,wb+,ab+

具体写入区别:例如:原本文件里如果是abcdefg,然后用几种写入方式分别写入1234

r+:1234efg

w/w+:1234

r/r+:abcdefg1234

例子:

cpp 复制代码
#include<stdio.h>


int main()
{

	//FILE* pFile = fopen("D:\\11111.txt", "r");//不安全
    //注意把所有跟路径相关字符串中的\补成\\

	FILE * pFile = NULL;

	fopen_s(&pFile, "D:\\11111.txt", "r");


	fclose(pFile);//关闭文件

	return 0;
}

在打开和关闭文件中,进行操作文件。

读取:

cpp 复制代码
#include<stdio.h>


int main()
{

	FILE * pFile = NULL;

	fopen_s(&pFile, "D:\\11111.txt", "r+");


	char buf[1024] = { 0 };
	//读取
	size_t size=fread(buf, 1, 1024, pFile);//参数分别为数据的存储位置,项目大小,要读取项目的最大数量,指向FILE结构的指针
    //当数为2和4时 2*4=8 4表示项
	//printf("%s\n", buf);
	//printf("%d\n", size);//当文件中为abcdefg,当2和4时显示读了3项 6字节 因为只有前三项读满了
    


	fclose(pFile);//关闭

	return 0;
}

写入:

cpp 复制代码
#include<stdio.h>


int main()
{

	FILE * pFile = NULL;

	fopen_s(&pFile, "D:\\11111.txt", "r+");
	
	fwrite("1234", 1, 4, pFile);
    //参数分别为指向要写入的数据的指针,项大小,要写入项的最大数量,指向FILE的指针


	fclose(pFile);

	return 0;
}
cpp 复制代码
#include<stdio.h>


int main()
{

	FILE * pFile = NULL;

	fopen_s(&pFile, "D:\\11111.txt", "r+");//例:此时文件内为abcdefg


	char buf[1024] = { 0 };
	
	size_t size=fread(buf, 1, 4, pFile);//只读前四个

	fseek(pFile, 0, SEEK_CUR);//从读到的位置开写
    //从读到写或从写到读,若没有经历文件尾的话必须调用函数去干预,否则会出错

	fwrite("1234", 1, 4, pFile);

    //此时文件abcd1234
	fclose(pFile);//关闭

	return 0;
}
相关推荐
Cc.Y8 小时前
Java零基础入门:可变字符串与包装类:StringBuilder、StringBuffer 与 通讯录管理系统实战
java·开发语言·python
阿森_dev8 小时前
2027 届毕设选题怎么选:30 个 Java 方向选题的实现难度排序
java·开发语言·spring boot·毕业设计·课程设计
by209998 小时前
C++ 多态:同一个基类接口,调用不同的函数
开发语言·c++·经验分享·多态
笔墨登场说说8 小时前
flink bin/start-cluster.sh 帮我做成开机启动
开发语言·python
Sarvartha8 小时前
Lambda 表达式和函数式接口
java·开发语言
小白学大数据9 小时前
拼多多反爬对抗实战:Scrapy 中间件化采集架构解析
开发语言·scrapy·中间件·架构
学逆向的9 小时前
win32注入代码
开发语言·网络安全·api·win32
wuminyu9 小时前
ForkJoinPool窃取线程在扫描其他WorkQueue时的随机采样算法与Phase线程挂起唤醒机制解析
java·linux·c语言·jvm·c++
Sarvartha9 小时前
内部类知识
java·开发语言
Logic10110 小时前
C语言/数据结构欧几里得算法题解:长方形切割最大正方形——贪心划分计数
c语言·数据结构·算法·贪心算法·时间复杂度·空间复杂度·欧几里得算法