C++文件读写小记(fstream文件流)

要使用控制台输入输出(cin,cout) 需要的头文件#include<iostream> 命名空间using namespace std;文件输入输出流,需要的头文件为 #include<fstream>(实际其内部包括:ifstream和ofstream)

文件流类继承关系:

1.打开文件

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

filename-要打开的文件路径名,mode-打开文件方式,prot-打开文件属性

  • 常用mode:
ios::in为输入打开文件
ios::out为输出打开文件
ios::ate文件打开初始位置在文件尾
ios::app以附加形式打开文件
ios::trunc若文件已存在先删除(以替换形式打开文件)
ios::binary打开二进制文件
ios::nocreate不建立文件,所以文件不存在时打开失败
ios::noreplace不覆盖文件,所以打开文件时如果文件存在失败

mode可以组合使用,如:

std::ifstream in;
in.open(inputfileName,ios::in|ios::binary)

也可以在声明时直接隐式调用open(),如:

ifstream in(inputfileName,ios::in|ios::binary);

2.关闭文件

  • close()

 注意:关闭的只是流对象所打开的文件,仍然可以利用流对象去打开别的文件。如:

#include<fstream>
int main()
{
   ifstream in("1.txt",ios::in);
   in.close();
   in.open("2.txt",ios::in);
}

3.文件输入输出流

文本文件的读写可以如同类与控制台交互一样利用"<<”进行写

#include<fstream>
using namespace std;
int main(){
  ofstream out("out.txt");
  if(out.is_open())
  {
     out<<"Hello World"<<endl;//写文件可直接使用"<<"运算符输出到输出流指向的文件中
     out.close();
  }
}     //文件写操作

4.状态标志符

有一些验证流的状态的成员函数(所有都返回bool型返回值):

  • bad()
    如果在读写过程中出错,返回true.
  • fail()
    除了与bad()同样的情况下返回true外,加上格式错误时也返回true,例如当想要读入一个整数 ,而得到一个字母。
  • eof()
    如果读文件到达文件的末尾,返回true。
  • good()
    最通用的验证:如果遇上以上任何一个函数返回true的话,此函数返回false。
  • clear()
    重置以上成员函数所检查的状态标志,没有参数。

5.其他常用函数

获得和设置流指针(get and put stream pointers)

所有输入/输出流对象(i/o streams objects)都有至少一个流指针:

  • ifstream, 类似istream, 有一个被称为get pointer的指针,指向下一个将被读取的元素。
  • ofstream, 类似 ostream, 有一个指针 put pointer ,指向写入下一个元素的位置。
  • fstream, 类似 iostream, 同时继承了get 和 put

我们可以通过使用以下成员函数来读出或配置这些指向流中读写位置的流指针:

  • tellg() 和 tellp()

这两个成员函数不用传入参数,返回pos_type 类型的值(根据ANSI-C++ 标准) ,就是一个整数,代表当前get 流指针的位置 (用tellg) 或 put 流指针的位置(用tellp).

  • seekg() 和seekp()

这对函数分别用来改变流指针get 和put的位置。两个函数都被重载为两种不同的原型:

seekg(pos_type position);//输入流操作
seekp(pos_type position);//输出流操作

使用这个原型,流指针被改变为指向从文件开始计算的一个绝对位置。要求传入的参数类型与函数 tellg 和tellp 的返回值类型相同。

seekg ( off_type offset, seekdir direction );//输入流操作
seekp ( off_type offset, seekdir direction );//输出流操作

使用这个原型可以指定由参数direction决定的一个具体的指针开始计算的一个位移(offset)。它可以是:

ios::beg从流开始位置计算的位移
ios::cur从流指针当前位置开始计算的位移
ios::end从流末尾处开始计算的位移

文件操作比较全的一个文章:文件操作(FILE)与常用文件操作函数——C语言 - 蓝海人 - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值