文件操作

2013-12-2
一、概述
   对于文件的读写操作,C++提供了更为方便强大的模式功能。我们当然可以使用传统的C-FILE*模式打开文件,也可以使用Windows提供的CreateFile函数获得文件句柄,但是考虑到跨平台和简便性,还是要数C++的iostream类对象。iostream提供了对于标准输入输出、文件读写和内存string读写的全套机制,当然,这一切都建立在类树结构的继承-派生机制之上。

 

1.标准I/O库的组织结构:
    iostream类继承自ostream和istream,同时兼顾读取和写入,而ostream专门处理数据流的写入问题,派生出ofstream(文件)和ostringstream(string类型),istream则专门处理数据流的读取问题,派生出ifstream(文件)和istringstream(string类型)。
    标准I/O库只有三个头文件:iostream(cin/cout/cerr),fstream(ifstream/ofstream/fstream),sstream

(istringstream/ostringstream/stringstrem)。


2. 文件的输入与输出
     文件的输入与输出主要依赖fstream/istream/ostream三种类,配合使用打开的模式从而实现文件的读取和写入。
3.打开模式的几个问题
     与ifstream流对象关联的文件将默认以ifstream::in模式打开;与ofstream流对象关联的文件对象则默认以ofstream::out和ofstream::trunk模式打开;与fstream流对象关联的文件对象则默认以fstream::in | fstream::out模式打开。一般来说,几种文件打开模式可以自由组合,但是有一些简单的规则,比如in和app是不能搭配的,同样in和trunk(清空文件内容)也是不能搭配的,可用的有效搭配有:
     out;   out | app;   out | trunk
     in;   in | out;   in | out | trunk


二、功能演示
1.文件的输出操作
     想要程序中的数据输出到文件中,一共需要以下5个步骤:
① 包含fstream头文件:#include
② 建立ofstream对象:ofstream ocout;
③ 将对象与文件关联:ocout.open(“test.txt”);
④ 使用该对象将数据输出到文件test中:ocout<<”Hello,C++!”;
⑤ 关闭与文件的连接:ocout.close();
⑥清空状态:ocout.clear();
注意!单纯close文件对象不会清空记录的条件状态,因此如果重复使用同一个文件对象务必调用clear函数将其状态清空刷新!
源代码:
#include
usingnamespacestd;
 
int  main()
{
     ofstream ocout;
      ocout.open("test.txt");
       //也可直接利用构造函数创建对象
      //ofstream ocout("test.txt");
       if (!ocout)
     {
          cerr << "Unable to open file: "<<endl;
          return -1;
     }
      ocout<<"hello!"
      <<endl;
      ocout.close();
      Ocuout.clear();
      return 0;
}
2.读取文件中的数据
    打开文件读取数据的方法和输出数据到文集中的方法基本上是一样的,同样也需要5个步骤:
① 包含fstream头文件:#include
② 建立ifstream对象:ifstream icin;
③ 将对象与文件关联:icin.open(“test.txt”);
④ 使用该对象读取文件test中的数据到数组temp中:icin>>temp;
⑤ 关闭与文件的连接:icin.close();
p.s同上面一样,我们也可以将第2步和第3步合并成一句话:
   ifstream icin("test.txt");
 源代码:
#include "stdafx.h"
#include
#include
#include

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
 ifstream icin;
    icin.open("test.txt");
    char temp[100];//定义一个字符数组
    icin>>temp;//将文件中的数据读到字符数组
    cout<<temp<<endl;//将temp中存放的内容输出到屏幕上
    return 0;
}
如何读取空格和空格后面的字符 :
   我们在写文件的时候,空格是不可避免的。但是C++只要一遇到空字符便会停止输出。这里的空字符就是空格,或者是’\0’。那么这样一来,如果我们在

文件中有空格字符,那么空格后面的字符就无法被输出到屏幕上了。怎么办呢?这时我们就可以使用getline函数来解决这个问题。
   我们将test.txt的内容,改为如下:
   This is a test!
源代码:
#include "stdafx.h"
#include
#include
#include

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
 ifstream icin;
    icin.open("test.txt");
  char temp[100];//定义一个字符数组
  icin.getline(temp,100);
    cout<<temp<<endl;//将temp中存放的内容输出到屏幕上
    return 0;
}
如何读取整段文字:
   上面的例子还有个缺陷,就是只能读取整个一行的文字,而不能读取整段文字。其实getline()函数还有第三个参数:
cin.getline(char* cha,int num,char f);
f为结束符,当遇到f时候就停止录入。
所以我们要读取整段话,将f设为空字符’\0’即可,函数默认结束符为’\n’。
源码:
#include "stdafx.h"
#include
#include
#include

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
 ifstream icin;
    icin.open("test.txt");
  char temp[100];//定义一个字符数组
  icin.getline(temp,100,’\0’);
  //或者icin.getline(temp,100,0);
    cout<<temp<<endl;//将temp中存放的内容输出到屏幕上
    return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值