C++ IO标准库 文件操作

本文详细介绍了C++的iostream库,包括istream、ostream和iostream类,以及cin、cout对象的使用。文章指出C++的输入输出库与C的stdio.h不同,它是以类的形式组织的,支持类库重载操作符<<和>>。iostream库包含了用于文件输入输出的fstream类,如ifstream、ofstream和fstream,分别用于读、写和读写文件。文章讨论了如何打开和关闭文件,以及如何进行文本和二进制文件的读写,包括基本数据类型和数据块的读写。此外,还提到了流状态的检测、文件定位以及错误处理。最后,文章强调了在二进制文件操作中使用write和read函数的重要性,以及如何通过seekg和seekp进行文件指针的管理。
摘要由CSDN通过智能技术生成
               

C++标准库 之 iostream库的学习笔记(一)iostream库的介绍和istream,ostream类以及cin,cout对象

c语言的标准输入输出库是stdio.h  是一个函数库而不是类库。
其中包括了我们最常使用的scanf  printf  都是一些独立的全局函数,因为C语言是不支持类的。

c++的标准输入输出库iostream 是一个类库,以类的形式组织,使用该库中的类要先引用命名空间:using namespace std;
最常使用的是cin和cout,这两个都是对象,cin是istream类的对象,cout是ostream类的对象,而输入的cin>>与输出时的cout<<中的左移<<与右移>>分别是istream类与ostream类的操作符重载。

iostream库里面创建了3个标准流对象:
1 cin 表示标准输入的istream对象,cin可以使我们从设备读取数据。
2 cout 表示标准输出的ostream对象,cout可以使我们向设备写入数据。
3 cerr 表示标准错误的ostream对象,cerr是导出程序错误消息的地方,只能向屏幕设备写数据。

标准的流对象都有默认的设备:
cout << data;  cout默认的设备是显示器缓冲区。
cin >> data;  cin默认的设备是键盘缓冲区。

iostream库由以下几个库组成:fstream, iomainip, ios, iosfwd, iostream, istream, ostream, sstream, streambuf, strstream。
istream用来访问操作系统的输入流,ostream访问操作系统的输出流,iostream同时继承了这两个类。

在ostream类中,重载了许多的左移<<操作符,对每种基本数据类型都做了重载,比如
&ostream operator<<(ostream &temp, int source);
&ostream operator<<(ostream &temp, char source);
&ostream operator<<(ostream &temp, char* source);
由于以上重载返回的数据类型都是ostream的引用,ostream又可以作为左值,所以可以实现cout<<"abc"<<endl<<123;

同样在istream类中,也重载了许多右移>>操作符,对每种基本数据类型都做了重载,比如
&istream operator>>(istream &temp,int source);
&istream operator>>(istream &temp,char source);

以上是终端标准输入输出设备的输入输出,也就是一般pc机的键盘和显示器的输入输出。

http://www.cnblogs.com/coderlee/archive/2008/01/21/1046928.html

C++标准库 之 iostream库的学习笔记(二)fstream库以及ofstream类的使用

iostream库不仅支持终端设备的输入输出,还支持文件的输入输出,和文件有关的输入输出类声明在fstream头文件中,有三个类负责文件的输入输出

1) ifstream类:从istream类派生。
2) ofstream类:从ostream类派生。
3) fstream类:从iostream类派生。

由于文件的输入输出和键盘鼠标的输入输出是不一样的,一般pc机只有一个键盘设备,所以iostream库内部声明了一个istream类的对象cin,这个对象负责从键盘获取数据,而文件设备在系统中是由许多的,所以iostream库内部无法给你为机器的每个文件都创建一个负责获取数据的ifstream对象和负责写入数据的ofstream对象,所以我们要针对一个文件进行读取或写入数据的时候都要自己创建一个ifstream或ostream类的对象来用。

ofstream类的默认构造函数如下:

ofstream::ofstream( const   char *  filename,  int  mode  =  ios:: out ,  int  openport  =  filebuf::openport);

filename是要打开的文件名,
mode是打开的方式,
openport是打开文件的属性。

mode可以设置的方式如下:
ios::app        以追加的方式打开
ios::ate        文件打开后定位到文件尾
ios::binary    以二进制方式打开文件,默认是以文本方式打开
ios::in          文件以读(输入)方式打开
ios::out        文件以写(输出)方式打开
ios::trunc     如果文件存在,则把文件清空。
以上属性用“|”(按位或)连接起来。

openprot属性如下:
0    普通文件
1    只读文件
2    隐含文件
4    系统文件
以上属性可以用加或者按位或方式组织起来,比如1|2和3都代表既是只读又是隐含文件。

在windows操作系统中可以不要第三个参数,如果加入第三个参数,那第三个参数是打开文件的共享方式,也就是打开这个文件时,其他进程是否可以读写该文件。
共享方式参数可以是下面的值:
0x10                   //_SH_DENYRW   Denies   read   and   write   access   to   the   file 
0x20                   //_SH_DENYWR   Denies   write   access   to   the   file 
0x30                   //_SH_DENYRD   Denies   read   access   to   the   file. 
0x40                   //_SH_DENYNO   Permits   read   and   write   access   
其他值都会报 "Invalid   sharing   flag "的错误。

    ofstream hFile( " c:\\1.txt " , ios:: out , _SH_DENYRW);  //  _SH_DENYRW is deny read and write
    
     if  ( ! hFile)  //  if the file could open, hFile is a handle, else is zero
     {
        cout << "write fail!" << endl;
        cout << "access is denies,maybe the file is readonlys,or use deny read opened of other process." << endl;
    }

     else
     {
        hFile << "by coderlee writes";
        cout << "write success!" << endl;
    }

    hFile.close();  //  opened file need close.

上面是写文件的事例代码,先打开文件,然后判断是不是0,如果是0,则提示write fail否则写文件,提示write success.

http://www.cnblogs.com/coderlee/archive/2008/01/21/1046932.html


ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;

在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:

1、插入器(< < )
  向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout< < " Write Stdout" < < '/n'; 就表示把字符串" Write Stdout" 和换行字符('/n')输出到标准输出流。

2、析取器(> > )
  从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin> > x; 就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。

  在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。下面就把此类的文件操作过程一一道来。

一、打开文件
  在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:

void open(const char* filename,int mode,int access);

参数:

filename:  要打开的文件名
mode:    要打开文件的方式
access:   打开文件的属性
打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:

ios::app:   以追加的方式打开文件
ios::ate:   文件打开后定位到文件尾,ios:app就包含有此属性
ios::binary:  以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文
ios::in:    文件以输入方式打开(文件数据输入到内存)
ios::out:   文件以输出方式打开(内存数据输出到文件)
ios::nocreate: 不建立文件,所以文件不存在时打开失败
ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败
ios::trunc:  如果文件存在,把文件长度设为0
  可以用“或”把以上属性连接起来,如ios::out|ios::binary

  打开文件的属性取值是:

0:普通文件,打开访问
1:只读文件
2:隐含文件
4:系统文件
  可以用“或”或者“+”把以上属性连接起来 ,如3或1|2就是以只读和隐含属性打开文件。

  例如:以二进制输入方式打开文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值