文件读写(C\C++)

一、C处理文件

首先来看C中处理文件的方式,因为C是面向过程的语言,所以使用起来较为繁琐,你需要记住很多函数
而这些函数所在的头文件为:

#include<cstdio> //或者#include<stdio.h>均可

C语言库中的函数,很多都存在安全隐患,就会存在一个相应的安全函数,一般对应的安全函数名称都是在原函数后添加_s后缀
例如:fopen的安全函数为fopen_s 相比较而言,安全函数会比标准函数使用更繁琐,
所以很多情况下我们会习惯于使用标准函数, 但在VS环境下直接使用不安全的函数,
会直接报错,编译无法通过此时就必须要定义对应的宏才能正常使用
而安全函数则无需定义任何宏,可直接使用具体使用哪一种看个人习惯,官方推荐使用安全函数

1、打开文件

//标准函数:
FILE* fopen(
const char * _FileName,//要打开的文件名,不指定路径,则在当前文件夹找
const char * _Mode //打开的模式 读r 写w 或追加a
);
//返回值:打开失败返回NULL,打开成功则返回指向文件的标识符
------------------------------------------------------------------
//安全函数
errno_t fopen_s(
FILE**      _Stream, //保存打开文件后的标识符
const char * _FileName, //要打开的文件名,不指定路径,则在当前文件夹找
const char * _Mode //打开的模式 读r 写w 或追加a
);
 //返回值:打开成功返回0,打开失败则返回对应错误代码
--------------------------------------------------------------------
//使用
#define _CRT_SECURE_NO_WARNINGS //vs环境下,必须定义该宏,否则报错
#include<cstdio>
using namespace std;
int main() {
	FILE* file = fopen("1.txt","r"); //以读的方式打开文件
	if (file == NULL) { //file为NULL,则打开文件失败,退出程序
		return -1;
	}
}
------------------------------------------------------------------
#include<cstdio>
using namespace std;
int main() {
	FILE* file;
	errno_t err=fopen_s(&file,"1.txt","r"); //以读的方式打开文件
	if (err != 0) { //err不为0,则打开文件失败,退出程序
		return -1;
	}
}

2、读取文件

//标准函数:
size_t  fread(
void*  _Buffer, //读取到的内容存放空间
size_t _ElementSize, //每次读多少个字节
size_t _ElementCount, //读多少次
FILE*  _Stream //文件标识符
);
//返回值:实际读取的次数,注意,实际的取得字节数应该是该返回值和_ElementSize参数相乘,所以一般_ElementSize参数填1
--------------------------------------------------------------------
//安全函数:
size_t fread_s(
void*  _Buffer,//读取到的内容存放空间
size_t _BufferSize, //第一个参数指示的缓存区大小
size_t _ElementSize,//每次读多少个字节
size_t _ElementCount,//读多少次
FILE*  _Stream //文件标识符
);
//返回值:实际读取的次数,注意,实际的取得字节数应该是该返回值和_ElementSize参数相乘,所以一般_ElementSize参数填1
--------------------------------------------------------------------
//使用
#define _CRT_SECURE_NO_WARNINGS
#include<cstdio>
using namespace std;
int main() {
	FILE* file = fopen("1.txt","r"); //以读的方式打开文件
	if (file == NULL) { //file为NULL,则打开文件失败,退出程序
		return -1;
	}
	char buf[0xFF]; //定义存放读取内容的缓存区
	size_t size=fread(buf,1,100, file); //每次读一个字节,读100次
}
--------------------------------------------------------------------
#include<cstdio>
using namespace std;
int main() {
	FILE* file;
	errno_t err=fopen_s(&file,"1.txt","r"); //以读的方式打开文件
	if (err != 0) { //err不为0,则打开文件失败,退出程序
		return -1;
	}
	char buf[0xFF];  //定义存放读取内容的缓存区
	size_t size=fread_s(buf,sizeof(buf),1,100,file);//每次读一个字节,读100次
}
1、fgetc:从文件中读取一个字符
int fgetc(
FILE* _Stream //文件标识符
);
//返回值:返回读取到的一个字符
--------------------------------------------------------------
#define _CRT_SECURE_NO_WARNINGS //vs环境下必须定义该宏,否则报错
#include<cstdio>
using namespace std;
int main() {
	FILE* file = fopen("1.txt","r"); //已只读方式打开
	if (file == NULL) {  //打开失败直接返回
		return -1;
	}
	char c=fgetc(file); //读取一个字符
}
2、fgets:从文件中读取一个字符串
char* __cdecl fgets(
char* _Buffer, //存放读到的字符缓冲区
 int   _MaxCount, //该缓存区的大小
FILE* _Stream //文件标识符
);
//返回值:成功为_Buffer指针,失败为NULL
---------------------------------------------------------------
#define _CRT_SECURE_NO_WARNINGS //vs环境下必须定义该宏,否则报错
#include<cstdio>
using namespace std;
int main() {
	FILE* file = fopen("1.txt","r"); //已只读方式打开
	if (file == NULL) {  //打开失败直接返回
		return -1;
	}
	char buf[0xFF];
	fgets(buf,0xFF,file); //读取一行字符串
}

3、fscanf:按格式从文件中读取指定内容,与scanf函数类似
int fscanf(
 FILE*       const _Stream,//文件标识符
 char const* const _Format, //指定读取格式,与printf格式相同
        ... //存放读取内容的缓存区
)
--------------------------------------------------------------
#define _CRT_SECURE_NO_WARNINGS //vs环境下必须定义该宏,否则报错
#include<cstdio>
using namespace std;
int main() {
	FILE* file = fopen("1.txt","r"); //已只读方式打开
	if (file == NULL) {  //打开失败直接返回
		return -1;
	}
	int d; //存放数字
	char buf[0xFF]; //存放字符串的缓存区
	fscanf(file,"%d %s",&d,buf); //按格式读取文件内容
}
4、fscanf_s:fscanf的安全函数,作用相同
int fscanf_s(
 FILE*       const _Stream,//文件标识符
 char const* const _Format, //指定读取格式,与printf格式相同
        ... //存放读取内容的缓存区,注意在每个缓存区大小后一个参数为该缓存区的大小
)
------------------------------------------------------------------------------
#include<cstdio>
using namespace std;
int main() {
	FILE* file;
	errno_t err=fopen_s(&file,"1.txt","r");
	if (err != 0) {
		return -1;
	}
	int b;
	char buf[0xFF];
	fscanf_s(file,"%d %s",&b,buf,sizeof(buf));
	fclose(file);
}

3、写入文件

size_t fwrite(
void const* _Buffer, //要写入的内容
size_t _ElementSize, //元素大小
size_t  _ElementCount, //元素个数
FILE*   _Stream //文件标识
 );
------------------------------------------------------------------------------
#define _CRT_SECURE_NO_WARNINGS //vs环境下必须定义该宏,否则报错
#include<cstdio>
using namespace std;
int main() {
	FILE* file = fopen("1.txt","w"); //已只读方式打开
	if (file == NULL) {  //打开失败直接返回
		return -1;
	}
	char buf[] = "test"; //要写入的内容
	fwrite(buf,1,sizeof(buf),file); //写入操作
}
1、fputc:向文件中写入一个字符
int  fputc(
int   _Character,//要写入的字符
FILE* _Stream //文件标识符
);
------------------------------------------------------------------------------
#include<cstdio>
using namespace std;
int main() {
	FILE* file;
	errno_t err=fopen_s(&file,"1.txt","w");
	if (err != 0) {
		return -1;
	}
	int ret=fputc('c',file);//向file标识的文件写入一个c字符
}
2、fputs:向文件中写入一个字符串
int fputs(
char const* _Buffer,//要写入的内容
FILE* _Stream //文件标识符
);
------------------------------------------------------------------------------
int main() {
	FILE* file;
	errno_t err=fopen_s(&file,"1.txt","w");
	if (err != 0) {
		return -1;
	}
	char buf[] = "test";
	int ret = fputs(buf,file); //将buf内的内容写入到file标识的文件
}
3、fprintf:向文件中写入指定格式字符串,与pritnf函数类似
int fprintf(
 FILE* _Stream, //文件标识符
char const* const _Format, //写入格式 与printf使用方式相同
        ...
)
------------------------------------------------------------------------------
#include<cstdio>
using namespace std;
int main() {
	FILE* file;
	errno_t err=fopen_s(&file,"1.txt","w");
	if (err != 0) {
		return -1;
	}
	fprintf(file,"%d %s",4,"test");  //向fille标识的文件写入数字4和字符串test
}
4、fprintf_s:fprintf的安全函数

与fprintf没什么区别,不再讲解

4、关闭文件

int fclose(
FILE* _Stream //文件标识符
);
------------------------------------------------------------------------------
#include<cstdio>
using namespace std;
int main() {
	FILE* file;
	errno_t err=fopen_s(&file,"1.txt","w");
	if (err != 0) {
		return -1;
	}
	fclose(file);//关闭文件
}

二、C++处理文件

C++使用了面向对象对文件处理进行了封装,所以处理文件会比C方便很多

#include<fstream> //处理文件的头文件
using namespace std; //引用该命名空间,不引用将必须使用std::fstring 的方式使用该类
通用的类fstream:
#include<fstream>
using namespace std;
int main() {
	fstream file;
	file.open("1.txt",ios::out); //以只写模式打开文件
	char buf[] = "test";
	file.write(buf,sizeof(buf));//写入文件
	file.close(); //关闭文件

	file.open("1.txt", ios::app); //以追加模式打开文件
	char buf1[] = "test1";
	file.write(buf1, sizeof(buf));//写入文件末尾
	file.close(); //关闭文件

	file.open("1.txt",ios::in); //以只读方式打开文件
	char buf2[0xFF]; //存储读取的内容
	file.read(buf2,0xFF); //读文件
	file.close(); //关闭文件
}
读文件的类ifstream:
#include<iostream>
#include<fstream>
using namespace std;
int main() {
	ifstream f("1.txt");
	char buf[0xFF];
	f.read(buf,0xFF); //普通读取
	char c=f.get(); //读取一个字符

	char bufLine[0xFF];
	f.getline(bufLine,0xFF); //读取一行
}
写文件的类ofstream:
#include<iostream>
#include<fstream>
using namespace std;
int main() {
	ofstream f("1.txt");
	char buf[0xFF];
	f.write("hello world",12); //普通写
	f.put('c'); //写入一个字符
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Minuw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值