C++文件读写详解(ofstream,ifstream,fstream)

最近多次遇到读取文件的库函数,在此做个记录,主要参考了几位大神的博文,以备复习之用

这里主要是讨论fstream的内容:

#include<fstream>
ofstream   //文件写操作,由内存写入设备中
ifstream   //文件读操作,由存储设备读到内存中
fstream    //读写操作,对打开的文件可以进行读写操作

1. 打开文件

在fstream类中,成员函数open()实现打开文件的操作,从而将数据流和文件进行关联,通过ofstream,ifstream,fstream对象进行对文件的读写操作。

函数:open()

public member function


void open(const char* filename,ios_base::openmode mode = ios_base::in | ios_base::out);

void open(const w_char_t *_Filename,ios_base::openmode mode = ios_base::in | ios_base::out,int prot = ios_base::_Openprot);

参数:filename  操作文件名

         mode  打开文件的方式

         prot  打开文件的属性  //这个基本很少用到

打开文件的方式在ios类(所有流式I/O的基类)中定义,有如下几种方式:

         ios::in                            为输入(读)而打开文件

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

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

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

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

         ios::binary                    二进制文件

这些方式是能够进行组合的,以“或”运算的方式(‘|’),如:

    

ofstream out;
out.open("hello.txt",ios::in | ios::out | ios::binary)

 

很多程序中,可能碰到ofstream out("Hello.txt"), ifstream in("hello.txt"),  fstream foi("hello.txt")这样的使用,并没有显示的去调用open()函数就可以进行文件的操作,这是因为调用了其默认的打开方式,因为在stream类的构造函数中调用了open()函数,并拥有同样的构造函数,所以在这里可以直接使用流对象进行文件的操作,默认方式如下:

ofstream out("hello.txt",ios::out);

ifstream in("hello.txt",ios::in);

fstream foi("hello.txt",ios::in | ios::out);

当使用默认方式进行文件的操作时,可以使用成员函数is_open()对文件是否打开进行验证。

2. 关闭文件

当文件读写操作完成后,必须将文件关闭以使文件重新变为可访问的。成员函数close(),它负责将缓存中的数据及时写入文件并关闭文件。这个函数一旦被调用,原先的流对象就可以被用来打开其他的文件了,这个文件也就可以重新被其他的进程所访问了。为防止流对象被销毁时还联系着打开的文件,析构函数也会自动调用关闭函数close().

3.文本文件的读写

类ofstream,ifstream和fstream是分别从ostream,istream,iostream类中继承来的。这就是为什么fstream对象可以使用其父类的成员来访问数据。

一般来说,我们将使用这些类与控制台交互同样的成员函数(cin,cout)来进行输入输出。如下面所示,可以使用重载的插入操作符<<:

//write on a text file
#include<ofstream>

int main()
{
    ofstream out("out.txt");
    if(out.is_open())
    {
       out<<"this is a line.\n";
       out<<"This is another line.\n";
       out.close();
    }
    return 0;
}

从文件中读入数据可以使用与cin>>相同的方法:

//reading a text file.
#include<iostream>
#include<fstream>

int main()
{
   char buffer[256];
   ifstream in("test.txt");
   if(!in.is_open())
   {
       cout<<"Error while opening file.";
       return 1;
   }
   while(!in.eof())
   {
     in.getline(buffer,256);
     cout<<buffer<<endl;
    }
 return 0;
}

上面的例子读入一个文件文本的内容,然后将它打印到屏幕上。使用了一个新的成员函数eof(),它是ifstream从类ios中继承过来的,当达到文件末尾时返回true。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值