c++中ifstream和ofstream的详细用法

TITLE:因为不经常用这两个操作,每次用都得找,网上的文章良莠不齐,有时候不容易找到合适的,故将其记录下来,供以后使用方便。

1. fstream

fstream提供了三个类,用来实现c++对文件的操作。(文件的创建、读、写)。
ifstream --   从已有的文件读 
ofstream --  向文件写内容 
fstream --    打开文件供读写 

2.文件打开模式: 
ios::in--                 
ios::out --               写
ios::app--               从文件末尾开始写
ios::binary--           二进制模式
ios::nocreate--       打开一个文件时,如果文件不存在,不创建文件
ios::noreplace--     打开一个文件时,如果文件不存在,创建该文件
ios::trunc--             打开一个文件,然后清空内容
ios::ate--                打开一个文件时,将位置移动到文件尾 

3.文件指针位置在c++中的用法: 
ios::beg   文件头
ios::end   文件尾
ios::cur    当前位置
例子:
file.seekg(0,ios::beg); //让文件指针定位到文件开头 
file.seekg(0,ios::end); //让文件指针定位到文件末尾 
file.seekg(10,ios::cur); //让文件指针从当前位置向文件末方向移动10个字节 
file.seekg(-10,ios::cur); //让文件指针从当前位置向文件开始方向移动10个字节 
file.seekg(10,ios::beg); //让文件指针定位到离文件开头10个字节的位置 

4.常用的错误判断方法: 
根据数据流读写的状态,有4个验证函数,它们分别是:
· bad()
如果在读写过程中出错,返回 true 。例如:当我们要对一个不是打开为写状态的文件进行写入时,或者我们要写入的设备没有剩余空间的时候。
· fail()
除了与bad() 同样的情况下会返回 true 以外,加上格式错误时也返回true ,例如当想要读入一个整数,而获得了一个字母的时候。
· eof()
如果读文件到达文件末尾,返回true。
· good()
这是最通用的:如果调用以上任何一个函数返回true 的话,此函数返回 false 。

5.文件读写操作

由于类ofstream, ifstream 和fstream 是分别从ostream, istream 和iostream 中引申而来的,所以文件的读写操作与使用控制台函数cin和cout一样,“<<”表示对文件进行写操作,“>>”表示对文件进行读操作。

 

注意:在读取文件内容时,要用string类型或者char类型的变量接收,不然读出的内容会有错,例如:

这是我的写文件函数

void mice::Writemaze()
{
    ofstream outFile(filename,ios::out);
    for (int i = 0; i < width; i++)
    {
	for (int j = 0; j < length; j++)
	{
	    outFile << maze[i][j];//这个int型数组在其他函数里已赋入内容
	}
    }
    outFile.close();
}

写入文件里的内容

这是我的读文件函数,用了int型的数组接收读入内容,出现错误

void mice::Readmaze()
{
	ifstream inFile(filename, ios::in);
	int data[100][100];

	for (int i = 0; i < width; i++)
	{
	    for (int j = 0; j < length; j++)
	    {
		inFile >> data[i][j];
	    }
	}

	for (int i = 0; i < width; i++)
	{
		for (int j = 0; j < length; j++)
		{	   
                    cout<

读出来的内容如下,和写入的不一致

c++中ifstream和ofstream的详细用法_第1张图片

 将读文件函数改为用char型数组接收,错误解决

void mice::Readmaze()
{
	ifstream inFile(filename, ios::in);
	/**************************************
	* >>流操作只能把值赋给char型或string型变量
	*我把int data[100][100];改成了下面的:
	*测试可以了
	**************************************/
	char data[100][100];

		for (int i = 0; i < width; i++)
		{
			for (int j = 0; j < length; j++)
			{
				inFile >> data[i][j];
			}
		}
    cout<<"读出内容为:"<

可见,读出内容与写入内容一致

c++中ifstream和ofstream的详细用法_第2张图片

 

附:参考文献

https://www.cnblogs.com/zzc2018/p/9600577.html

https://blog.csdn.net/u010325193/article/details/80885925

https://blog.csdn.net/sinat_36219858/article/details/80369255

感谢他们的分享!

你可能感兴趣的:(C++,文件读写)