C++读写文本文件

2023年5月30日,周二下午:

这几天学习了C++对文本文件的读写,写篇博客来总结一下

由于内容太多,我没法一次性写完,之后会不定期更新的


我使用C++标准库中的fstream库来读写文本文件

用fstream来读写文本文件有两种方式:

1、使用插入运算符“<<”和提取运算符“>>”

2、使用fstream库里面的类的成员函数


使用插入运算符“<<”和提取运算符“>>”来读写文本文件

通过"<<"往文本文件中写入数据:

注意:C语言风格的字符串和C++的string类都可以通过"<<"往文本文件中写入数据。

我个人建议使用C++的string类,因为这样就不用考虑设置长度或者说大小的问题。如果你用C语言风格的字符串的话,还要设置字符数组的大小,有点麻烦。

#include 
#include 
using namespace std;

int main(){
	char cBuf[1024];
	string sBuf;
	ofstream ofs("text.txt",ios::out);
	
	cin>>cBuf;
	cin>>sBuf;
	
	//C语言风格的字符串和C++的string类都可以
	//通过"<<"往文本文件中写入数据
	ofs<

C++读写文本文件_第1张图片

C++读写文本文件_第2张图片

不过,这个程序或者说用“<<”往文本文件中写入数据有一个问题,那就是不能含空格,否则就会停止写入,即使空格后面还有内容

C++读写文本文件_第3张图片

C++读写文本文件_第4张图片

可以看到空格后面的内容没有写入

通过">>"从文本文件中读取数据:

注意:C语言风格的字符串和C++的string类都可以通过">>"从文本文件中读取数据。

我个人建议使用C++的string类,因为这样就不用考虑设置长度或者说大小的问题。如果你用C语言风格的字符串的话,还要设置字符数组的大小,有点麻烦。

假设文本文件text2.txt的内容如下:

中国专业IT社区CSDN(Chinese Software Developer Network)创立于1999年,致力于为中国软件开发者提供知识传播、在线学习、职业发展等全生命周期服务。

#include 
#include 
using namespace std;

int main(){
	string sBuf;
	//char cBuf[1024];
	ifstream ifs("text2.txt",ios::in);
	
	//把文本文件中的数据提取到sBuf中
	ifs>>sBuf;
	//把文本文件中的数据提取到C语言风格的字符串中也是可以的
	//ifs>>cBuf;
	
	//输出sBuf的内容
	cout<

C++读写文本文件_第5张图片

怎么句子没读取完呢???咋读到一半没到就停了???

这是因为Chinese前面有一个空格,也就是说用">>"从文本文件中读取数据时,遇到空格就会停止读取,哪怕后面还有内容没有读取。

那我想读取完怎么办?

目前是没有办法的,

ifs>>sBuf这个语句每次只会读取文本文件中的一个单词(即空格或换行符分隔的一组字符),

即使是你加上循环也不能解决这个问题:

#include 
#include 
using namespace std;

int main(){
	string sBuf;
	//char cBuf[1024];
	ifstream ifs("text2.txt",ios::in);
	
	//把文本文件中的数据提取到sBuf中
	ifs>>sBuf;
	//把文本文件中的数据提取到C语言风格的字符串中也是可以的
	//ifs>>cBuf;
	
	while(!ifs.eof()){
		//输出sBuf的内容
		cout<>sBuf;
	}

	ifs.close();
	return 0;
}

C++读写文本文件_第6张图片

总而言之,虽然用>>和<<很方便,但是局限性也不少。

但是>>和<<也非一无是处,通过<<和换行符"\n"可以很方便的按行写入数据,再搭配getline按行读取函数,可以很容易实现一个通讯录小项目及其数据的存储和读取,并且还可以很容易实现按名或者手机号等查找、浏览通讯录、按名或者手机号等删除等功能。之后有空的话,我会完成这个小项目,可能写在本篇博客的最后,也可能新开一篇博客。


使用fstream库里面的类的成员函数来读写文本文件

这部分内容还没写完,有空会更新的

你可能感兴趣的:(我的博客,c++,开发语言)