C++ 文件数据读写操作

最近在学习的时候用到文件操作,这里做下记录。

读取文件数据到数组中:

#include<iostream>
#include <cstdlib>
#include <string>
#include <vector>
#include <fstream>  //文件流库函数

using namespace std;
ifstream infile;   //输入流

int main()
{
	int datalen=0;
    double d[100];
	int i=0;
    infile.open("GPS_data.txt", ios::in); 
    while(!infile.eof()&& infile.good()) infile>>d[datalen++];
    for(int i=0;i<datalen-1;i++)
    {
        cout<<d[i]<<" ";
    }
    cout<<" "<<endl;
    infile.close(); 
    return 0;  
}

写数据到文件中:

#include<iostream>
#include <cstdlib>
#include <string>
#include <vector>
#include <fstream>  //文件流库函数

using namespace std;
ofstream outfile;   //输出流

int main()
{
    outfile.open("GPS_data.txt", ios::app);
    /*每次写都定位的文件结尾,不会丢失原来的内容,
    用out则会丢失原来的内容;用trunc清空文件内容*/
    if(!outfile.is_open ())
        cout << "Open file failure" << endl;
    else{
        outfile << "213" << "\t" << "213" << "\t" << endl;
        cout << "Write file success" << endl;
    }
    outfile.close();
	return 0;
}

对文件的操作是非常重要的,下面我们就来介绍一下C++中是如何对文件进行操作的。C++

通过以下几个类支持文件的输入输出:

ofstream: 写操作(输出)的文件类 (由ostream引申而来)

ifstream: 读操作(输入)的文件类(由istream引申而来)

fstream: 可同时读写操作的文件类 (由iostream引申而来)

打开文件(Open a file)

对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来,也就是说打开一个文件。被打开的文件在程序中由一个流对象(stream object)来表示 (这些类的一个实例) ,而对这个流对象所做的任何输入输出操作实际就是对该文件所做的操作。

要通过一个流对象打开一个文件,我们使用它的成员函数

open():void open (const char * filename, openmode mode);

这里filename 是一个字符串,代表要打开的文件名,mode 是以下标志符的一个组合: ios::in 为输入(读)而打开文件

ios::out 为输出(写)而打开文件

ios::ate 初始位置:文件尾

ios::app 所有输出附加在文件末尾

ios::trunc 如果文件已存在则先删除该文件

ios::binary 二进制方式

这些标识符可以被组合使用,中间以”或”操作符(|)间隔。例如,如果我们想要以二进制方式打开文件”example.bin” 来写入一些数据,我们可以通过以下方式调用成员函数open()来实现:

ofstream file;
file.open ("example.bin", ios::out | ios::app | ios::binary);

ofstream, ifstream 和 fstream所有这些类的成员函数open 都包含了一个默认打开文件的方式,这三个类的默认方式各不相同: 类 参数的默认方式

ofstream ios::out | ios::trunc

ifstream ios::in

fstream ios::in | ios::out

只有当函数被调用时没有声明方式参数的情况下,默认值才会被采用。如果函数被调用时声明了任何参数,默认值将被完全改写,而不会与调用参数组合。

由 于对类ofstream, ifstream 和 fstream 的对象所进行的第一个操作通常都是打开文件,这些类都有一个构造函数可以直接调用open 函数,并拥有同样的参数。这样,我们就可以通过以下方式进行与上面同样的定义对象和打开文件的操作:

ofstream file ("example.bin", ios::out | ios::app | ios::binary);

两种打开文件的方式都是正确的。

你可以通过调用成员函数is_open()来检查一个文件是否已经被顺利的打开了:

bool is_open();

它返回一个布尔(bool)值,为真(true)代表文件已经被顺利打开,假( false )则相反。

关闭文件(Closing a file)

当文件读写操作完成之后,我们必须将文件关闭以使文件重新变为可访问的。关闭文件需要调用成员函数close(),它负责将缓存中的数据排放出来并关闭文件。它的格式很简单:

void close ();

这个函数一旦被调用,原先的流对象(stream object)就可以被用来打开其它的文件了,这个文件也就可以重新被其它的进程(process)所有访问了。

为防止流对象被销毁时还联系着打开的文件,析构函数(destructor)将会自动调用关闭函数close。

状态标志符的验证(Verification of state flags)

除了eof()以外,还有一些验证流的状态的成员函数(所有都返回bool型返回值):

bad()

如果在读写过程中出错,返回 true 。例如:当我们要对一个不是打开为写状态的文件进行写入时,或者我们要写入的设备没有剩余空间的时候。

fail()

除了与bad() 同样的情况下会返回 true 以外,加上格式错误时也返回true ,例如当想要读入一个整数,而获得了一个字母的时候。

eof()

如果读文件到达文件末尾,返回true。

good()

这是最通用的:如果调用以上任何一个函数返回true 的话,此函数返回 false 。

要想重置以上成员函数所检查的状态标志,你可以使用成员函数clear(),没有参数。


发布了25 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43667745/article/details/100100350