C++写入和读取文件的方法

1.写入文件

https://blog.csdn.net/naibozhuan3744/article/details/78678571
//详情请看此链接

2.读取文件

知识点:

①要利用ifstream这个类,这个类里面有good(),getline()等函数,用的时候先要定义一个Ifstream类的成员,如ifstream ifile (“data.txt”)//定义了一个IFstream类成员 ifile, 指向的是data.txt这个文件 ,然后就可以直接用ifilie.good(),ifile.getline()

②ifstream.good()函数是用来读取判断文件里面是否还有内容即是否出错,有的话就返回1,没有的话就返回0;iftream.getline()函数是读文件中的数据,如ifile.getline(line,length);//第一个参数line是一个字符数组,第二个参数length是读取文件中每一行不超过的长度,这个函数的意思是,逐行读取Ifile文件里的数据,并存入到line这个字符数组中,每一行长度不超过length,遇到回车键结束

③puts()函数,puts()函数用来向标准输出设备(屏幕)输出字符串并换行,具体为:把字符串输出到标准输出设备,将’\0’转换为回车换行。其调用方式为,puts(s);其中s为字符串字符(字符串数组名或字符串指针

④getline函数:成员函数getline()是从输入流中读取一行字符,读到终止符时会将’0’(即空白符)存入结果缓冲区中,作为输入的终止。终止符可以是默认的终止符,也可以是定义的终止符。函数的语法结构是:

getline(<字符数组chs>,<读取字符的个数n>,<终止符>)

在函数遇到和结束定界符相等的字符时函数结束,同时函数抽出定界符,此种情况下该定界符既不被放回输入流,也不被放入要生成的字符串。所以由此可以理解输入结束后的第一个回车是定界符,被确认后抛弃,而第二个才是程序执行运行时正常需要的。
应用。

④在fsream头文件下的getline 函数,如果直接利用,如getline(iflie,str)//第一个参数为自己定义的ifstream的类成员,第二个是一个字符串变量,意思就是将iflie成员指向的文件里面的数据逐行读入str字符串变量,遇到回车键的时候结束一次读取,当遇到空白符的时候结束读取。此时getline函数就直接把ifile里面的数据看成了一个字符数组,然后将字符串变量直接看成了限制读取字符的个数,所以可以直接这么用
string str;
ifstream ifile (“data.txt”);
getline(ifile,str);
cout<

源码

①读取方式: 逐行读取, 将行读入字符数组, 行之间用回车换行区分

(1)提前设好一个静态的字符数组

#include 
#include 
#include 
#include 

int main()
{
	ifstream fin("data.txt");
	const int LINE_LENGTH = 100;
	char str[LINE_LENGTH];
	int count = 0;
	while (fin.getline(str, LINE_LENGTH))    // 逐行读取, 将行读入字符数组,遇到回车键结束一次读取,但是此时返回while的还不是0,当getline 读取到文件的最后一个数据读完了,然后读到空白符的时候,返回while 就是0了,所以中止while.第二个参数是指每行不超过这么多字符, 
	{
		cout << "Read from file: " << str << endl;//输出字符数组的数据,最后换行
		count++;
	}
        cout << count << endl;
        return 0;
}

(2)提前设好一个动态的字符数组
//这个方法不推荐,因为动态数组很容易把堆和栈给破坏,因为delete的时候最后指针指向性不明,在VS会报错,在dev不会报错

#include 
#include 
#include 

using namespace std;

int main()
{
	char* line;
	int count;
	cin>>count
	line=new char [count];
	ifstream ifile ("data.txt");
	while (ifile.good())//当文件里面有数据时执行
	{
		ifile.getline(line,256);
		puts(line);
	}
	return 0;
}
 //详情请看此链接 https://zhidao.baidu.com/question/554906675.html

②读取方式:读取方式: 逐行读取, 将行读入字符串, 行之间用回车换行区分

(1)while循环条件为读取数据

#include 
#include 
#include 
#include 
using namespace std;

void zhuhangduqu_string()
{
	ifstream fin("data.txt");
	string s;
	while (getline(fin, s))//读取fin文件的数据,将其存入字符串,遇到回车时结束第一次读取,但是返回while的是\n,所以执行完while体内的语句后,就继续while判断,此时getline又要读取文件数据,但是会从上次读取停止的地方开始往下读,周而复始,一直到getline读完全部不文件内容,遇到空白符时,返回while为0时,到下一次while循环判断就发现getline get到了0了,就中止while 了。
	{
		cout << "Read from file: " << s << endl;//注意不能有Puts()因为这个为字符串,不是数组
	}
}

(2)while循环条件为判断文件是否还有数据

#include 
#include 
#include 
#include 
using namespace std;

int main()
{
	int count;
	cin>>count;
	string line;//定义要给字符串变量
	ifstream ifile ("data.txt");
	while (ifile.good())//当读取文件不出错时,即里面还有数据时
	{
		getline(ifile,line);从文件中读取数据,存入到line字符数组中
		cout<<line<<endl;
	}

	return 0;
}

③读取方式: 逐词读取,文本数据中词之间用空格区分,且如果换行了也可以读取到,然后把读到的词赋值给s,一直读到全部数据读完了就结束了。

#include 
#include 
#include 
#include 
using namespace std;

void zhuziduqu()
{
	ifstream fin("data.txt");
	string s;
	int count = 0;
	while (fin>>s)
	{
		cout << "Read from file: " << s << endl;
		count++;
	}
	cout << count << endl;
}

你可能感兴趣的:(c++,数据结构,1024程序员节)