C++文件流操作

C++文件流操作学习

简单介绍

看到很多博文将自己的学习经历发出来,用来记录自己的学习点点滴滴,希望大家一起学习,共同进步。。。第一次,有点尬
本博文参考链接:
C++:文件流读写操作

实现

一、头文件
对文件进行读写操作首先必须要定义一个数据流对象指针,数据流对象指针有三种类型,它们分别是:
Ifstream:表示读取文件流,使用get()为单个字符的读取
Ofstream:表示写入文件流,使用put()为单个字符的写入
Fstream:表示文件读取/写入流

使用时只需包含头文件“fstream”即可;

二、打开文件模式
文件打开时也可以进行读写操作
1.默认打开文件模式:
ifstream默认打开文件时为读模式,若文件不存在打开失败。

ifstream file;
file.open("XXXX.txt");
//ifstream file("XXXX.txt");

ofstream默认打开文件时为写模式,若文件不存在就创建,若文件存在执行写入操作时替换。

ofstream file;
file.open("XXXX.txt");
//ofstream file("XXXX.txt");

fstream默认打开文件时为读写模式,文件不存在则报错,写入时也为替换写入。

fstream file;
file.open("XXXX.txt");
//fstream file("XXXX.txt");

2.选择功能打开文件模式
fstream选择ios::in模式,功能等同ifstream。

fstream file;
file.open("XXXX.txt",ios::in);
//fstream file("XXXX.txt",ios::in);

fstream选择ios::out模式,功能等同ofstream。

fstream file;
file.open("XXXX.txt",ios::out);
//fstream file("XXXX.txt",ios::out);

fstream选择ios::app模式,功能追加,无法读取。

fstream file;
file.open("XXXX.txt",ios::app);
//fstream file("XXXX.txt",ios::app);

fstream选择ios::_Nocreate模式,功能不创建文件,无文件则打开失败,可读取,无法写入。

fstream file;
file.open("XXXX.txt",ios::_Nocreate);
//fstream file("XXXX.txt",ios::_Nocreate);

ofstream选择ios::_Noreplace模式,不覆盖文件,文件存在返回失败,不存在则创建新文件,可写入,使用fstream创建需要与上一个ios::out。

fstream file;
file.open("XXXX.txt",ios::out|ios::_Noreplace);
//fstream file("XXXX.txt",ios::out|ios::_Noreplace);
ofstream file;
file.open("XXXX.txt",ios::_Noreplace);
//ofstream file("XXXX.txt",ios::_Noreplace);

fstream选择ios::binary模式,功能以二进制格式打开文件。

fstream file;
file.open("XXXX.txt",ios::binary);
//fstream file("XXXX.txt",ios::binary);

三、关闭文件流  
打开的文件使用完成后一定要关闭,fstream提供了成员函数close()来完成此操作。

//fstream txtfile;
txtfile.close();

四、文件读写操作

1.流读取写入:
插入器(<<)向文件输出;
析取器(>>)从文件输入。

操纵符功能输入/输出
endl输出一个换行符并刷新此流输出
ends输出一个空字符输出
oct格式化为八进制数值数据输入和输出
dec格式化为十进制数值数据输入和输出
hex格式化为十六进制数值数据输入和输出
setpxecision(int p)设置浮点数的精度位数输出
		int index = 0;
		for (index; index<10; index++)
		{
//读取十行,显示在控制台
			txtfile >> readdata;
			cout << readdata << endl;
//写入十行,由控制台输入
			//cin >> readdata; 
			//txtfile << readdata << endl;
		}

2、单字符读取写入:
写入:put()函数向流写入一个字符,其原型是ofstream &put(char ch)。功能是从输入字符的最后一个写入到流中。

txtfile.put('a');

读取:get()函数从流读入一个字符,其原型是ifstream &get(char &ch)。功能是从流中读取一个字符,结果保存在引用ch中,如果到文件尾,返回空字符(多个重载暂不叙述)

char readdata;
txtfile.get(readdata);

3、批量读写
read(unsigned char *buf,int num);
从文件中读取 num 个字符到 buf 指向的缓存中,如果在还未读入 num 个字符时就到了文件尾,可以用成员函数 int gcount();来取得实际读取的字符数;

	//定义一个int变量
	int s; 
	//二进制读方式打开
	ifstream inFile("students.dat", ios::in | ios::binary);
	if (!inFile) {
		cout << "error" << endl;
		return 0;
	}
	//一直读到文件结束
	while (inFile.read((char *)&s, sizeof(s))) { 
		//看刚才读了多少字节
		int readedBytes = inFile.gcount(); 
		cout << s << endl;
	}
	inFile.close();

在这里插入图片描述
write(const unsigned char *buf,int num);
从指针buf 指向的缓存写 num 个字符到文件中,值得注意的是缓存的类型是 unsigned char *,有时可能需要类型转换。

	//定义一个int变量
	int s;
	//以写模式和二进制模式打开文件
	ofstream outFile("students.dat", ios::out | ios::binary);
	//循环,当写入非int类型时结束循环
	while (cin >> s)
		//写入字符,将S的地址强制转换为 unsigned char *型
		outFile.write((char*)&s, sizeof(s));
	outFile.close();

控制台输入
txt文件打开控制台输入
在这里插入图片描述
五、文件定位
  和C的文件操作方式不同的是,C++ I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。所以,C++的文件定位分为读位置和写位置的定位,对应的成员函数是seekg()和seekp()。seekg()是设置读位置, seekp是设置写位置。它们最通用的形式如下:
  istream &seekg(streamoff offset,seek_dir origin);
  ostream &seekp(streamoff offset,seek_dir origin);
  streamoff定义于 iostream.h 中,定义有偏移量 offset 所能取得的最大值,seek_dir 表示移动的基准位置,是一个有以下值的枚举:
ios::beg:  文件开头
ios::cur:  文件当前位置
ios::end:  文件结尾

这两个函数一般用于二进制文件,因为文本文件会因为系统对字符的解释而可能与预想的值不同。例:

file1.seekg(1234,ios::cur); //把文件的读指针从当前位置向后移1234个字节
  file2.seekp(1234,ios::beg); //把文件的写指针从文件开头向后移1234个字节

以下两个操作都必须在文件关闭后才可以使用
remove("文件名”);把这个文件删除
rename(“旧文件名”,“新文件名”);

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值