简单文件读写操作

  • 类和引用说明
  • fstream
  • iostream
  • 读写操作:往文本里写和从文本里读

类和引用说明

fstream iostream两个类需要引用。
vs2012打开后,自动引入头文件stdafx.h。

#include "stdafx.h"
#include <iostream>
#include <fstream>

流作为一个载体,可以直接和文件进行交换,因此在流open后,对流的读写(用流输出<< 、流输入>>实现)就是对文件的读写操作啦。

fstream

ifstream ofstream是fstream的派生。fstream不直接提供默认的模式值,必须显示的写入提供模式。
ofstream的open()函数默认打开方式为操作,如果文件不存在,则建立一个文件,否则清空文件。
ifstream的open()函数默认打开方式为操作,如果文件不存在则出错。
open()函数实现功能与构造函数一样。
使用完成后需用close()函数切断文件和流的联系。

iostream

流输入运算符“>>”和流输出运算符“<<”。在对文件的操作中,可以通过对文件流对象和运算符“>>”和"<<“实现对文件的读写,如同用cin、cout和“>>”和”<<"对标准设备的读写一样。

读写操作:往文本里写和从文本里读

以下代码为向abc.txt内输入一行语句,并从def.txt文本中读出一行语句至屏幕。
使用ofstream的对象,o-output,是用于文件的输出操作。使用ifstream对象,i-input,是文件的输入操作。
即:input是从文本文件往内存里读数据,而output是从内存往文本文件里写数据。文本文件是“外”,内存是“内”
在vs中,相对路径是项目同名文件夹下(和*.cpp,stadfx.h在一个文件夹下)。vs自己的工程文件有一个大的文件夹,大文件夹里有一个项目同名文件夹才是放着各种*.cpp、*.h文件的,也就是相对路径在的地方。如我的电脑中abc.txt的绝对路径为:E:\C++_programe\ConsoleApplication1\ConsoleApplication1\abc.txt

#include "stdafx.h"
#include <iostream>
#include <fstream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	//往abc.txt里写入一句话
	//构造函数方法,打开文件,默认写操作方式
	ofstream a("abc.txt");
	if(a.fail()){
		cout << "打开文件失败" << endl;
		exit(1);
	}
	//向a中输入一行语句
	a << "Hello World!" << endl;
	//关闭文件,即切断文件和流的联系
	a.close();

	//从def.txt读出并输出至屏幕
	ifstream b;
	b.open("def.txt");
	if(b.fail()){
		cout << "fail" << endl;
		exit(2);
	}
	//x承接,从def.txt里读出的字符放到x中,再从x中取出,输出到屏幕
	char x;
	//EOF文件结束符.
	//函数eof()用来检测是否到达文件尾,如果到达文件尾返回非0值,否则返回0。
	while (!b.eof())
	{
		b >> x;
		cout << x;
	}
	cout << endl;
	b.close();
	return 0;
}

运行结果:

mysql流式读取是全部加载到mysql内存吗 流式读取文件_bc


说明:屏幕输出内容不会对txt文本中的空格和换行符输出,这是因为ifstream类对象在使用>>时会跳过空格,直接读取空格后的内容。

mysql流式读取是全部加载到mysql内存吗 流式读取文件_bc_02


如果是按行读取,需要添加string引用。下面为按行读取string的代码。

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
int _tmain(int argc, _TCHAR* argv[])
{
    string str1,str2;
	ofstream output("abc.txt");//打开文件
	//打开文件以后要写一个异常处理
	if(!output){
		cout << "打开失败" ;
		return -1;
	}
	str1="床前明月光,疑是地上霜";
	output << str1;
	output.close();
	ifstream input("abc.txt");
	input >> str2;
	cout << str2 << endl;
	input.close();
	return 0;
}

运行结果:abc.txt中有“床前明月光,疑是地上霜”语句,屏幕输出“床前明月光,疑是地上霜”语句。

mysql流式读取是全部加载到mysql内存吗 流式读取文件_bc_03