c++基础(5)——c++ 风格的fstream 读写文件

c++ 风格的fstream 读写文件

头文件:

#include <fstream>

fstream提供三种类,实现C++对文件的操作

  • ofstream:写操作,由ostream引申而来
  • ifstream:读操作,由istream引申而来
  • fstream :同时读写操作,由iostream引申而来

文件的类型:

文本文件 和 二进制文件

  • ios::in 为输入(读)而打开文件;
  • ios::out 为输出(写)而打开文件;
  • ios::ate 初始位置:文件尾;
  • ios::app 所有输出附加在文件末尾;
  • ios::trunc 如果文件已存在则先删除该文件;
  • ios::binary 二进制方式;
  • ios::nocreate:不建立文件,所以文件不存在时打开失败;
  • ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败;

这些标识符可以被组合使用,中间以”或”操作符(|)间隔。例如,如果我们想要以二进制方式打开文件"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(),没有参数。
文件读写的步骤:

1、包含的头文件:#include

2、创建流

3、打开文件(文件和流关联)

4、读写 (写操作:<<,put( ), write( ) 读操作: >> , get( ),getline( ), read( ))

5、关闭文件:把缓冲区数据完整地写入文件, 添加文件结束标志, 切断流对象和外部文件的连接
文件的读写:

1、文本文件的读写:

方法:

一次性读写若干字符

       1)使用运算符<< 和 >>进行读写
     
       功能:
     
       << 能实现以行为单位写入文件
     
       >> 不能一行为单位读入内存,总是以空格、Tab、回车结束,而是以单词为单位

代码:

函数功能:使用<< ,写入文件一行字符

#include <fstream>    
#include <iostream>  
     
using namespace std;  
     
void main()   
{      
    ofstream OpenFile("file.txt");       
    if (OpenFile.fail())       
    {       
        cout<<"打开文件错误!"<<endl;       
        exit(0);       
    }       
    OpenFile<<"abc def ghi";       
    OpenFile.close();       
    system("pause");       

}

运行结果:文件中写入内容:abc def ghi

函数功能:使用>>,从文件读入一个单词

#include <fstream>   
#include <iostream>  
 
using namespace std;   
void main()   
{   
const int len=20;   
char str[len];  
 
  ifstream OpenFile("file.txt");  
 
if (OpenFile.fail())   
     {   
        cout<<"打开文件错误!"<<endl;  
        exit(0);   
    }   
    OpenFile>>str;   
    cout<<str<<endl;   
    OpenFile.close();   
    system("pause");   
}  

运行结果:str的内容为abc,而不是abc def ghi(见空格停止)
2)使用运算符<<(写)和getline()进行读写
       功能:    
       <<:以行为单位输入文件    
       getline():以行为单位 读入内存,能一次读入一行    
       函数原型:istream &getline( char *buffer, streamsize num );     
       功能:getline( )函数用于从文件读取num-1个字符到buffer(内存)中,直到下列情况发生时,读取结束:     
       1):num - 1个字符已经读入     
       2):碰到一个换行标志    
       3):碰到一个EOF

代码:

#include <fstream>   
#include <iostream>  
 
using namespace std;  
 
void main()   
{   
const int len=20;   
char str[len];   
  ifstream OpenFile("file.txt");  
 
if (OpenFile.fail())   
    {   
        cout<<"打开文件错误!"<<endl;   
        exit(0);   
    }  
 
    OpenFile.getline(str,20);   
    cout<<str<<endl;   
    OpenFile.close();   
    system("pause"); 
}  

运行结果:str的内容为abc def ghi (一直把一行读完)

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值