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

您所在的位置:网站首页 std::ofstream::binary C++文件读写详解(ofstream,ifstream,fstream)

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

2023-08-23 16:03| 来源: 网络整理| 查看: 265

 

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

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

1 #include 2 ofstream //文件写操作 内存写入存储设备 3 ifstream //文件读操作,存储设备读区到内存中 4 fstream //读写操作,对打开的文件可进行读写操作 1、打开文件

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

  函数:open()

1 public member function 2 3 void open ( const char * filename, 4 ios_base::openmode mode = ios_base::in | ios_base::out ); 5 6 void open(const wchar_t *_Filename, 7 ios_base::openmode mode= ios_base::in | ios_base::out, 8 int prot = ios_base::_Openprot); 9 /* 10 参数:filename 操作文件名 11 mode 打开文件的方式 12 prot 打开文件的属性 //基本很少用到,在查看资料时,发现有两种方式 13 14 */

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

ios::in 为输入(读)而打开文件,文件不存在则创建(ifstream)默认的打开方式 ios::out

为输出(写)而打开文件,文件不存在则创建,若文件已存在则清空原内容

(ofstream默认的打开方式)

ios::ate  文件打开时,指针在文件最后。可改变指针的位置,常和in、out联合使用 ios::app

供写使用,文件不存在则创建,若文件已存在则在原文件内容后写入新的内容,

指针位置总在最后

ios::trunc 在读写前,先将文件长度截断为0(默认) ios::nocreate 文件不存在时产生错误,常和in或app联合使用 ios::noreplace 文件存在时产生错误,常和out联合使用 ios::binary 二进制格式文件

  这些方式是能够以“或”运算(“|”)的方式进行组合使用。

  文件保护方式选择项

filebuf::openprot 默认的兼容共享方式 filebuf::sh_none 独占,不共享 filebuf::sh_read 读共享 filebuf::sh_write 写共享

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

1 ofstream out("...", ios::out); 2 ifstream in("...", ios::in); 3 fstream foi("...", ios::in|ios::out);

 

2.关闭文件

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

 

3.文本文件的读写

  类ofstream, ifstream 和fstream 是分别从ostream, istream 和iostream 中引申而来的。这就是为什么 fstream 的对象可以使用其父类的成员来访问数据。一般来说,我们将使用这些类与同控制台(console)交互同样的成员函数(cin 和 cout)来进行输入输出。如下面的程序所示,我们使用重载的插入操作符:

1 #include "iostream" 2 #include 3 using namespace std; 4 void main() 5 { 6 fstream f("d:\\try.txt", ios::out);//供写使用,文件不存在则创建,存在则清空原内容 7 f > i >> d >> c; //读取数据 15 f.getline(s, 20); 16 cout ,以及函数(如getline)来操作符输入和输出数据,没有什么实际意义,虽然它们是符合语法的。

  文件流包括两个为顺序读写数据特殊设计的成员函数:write 和 read。第一个函数 (write) 是ostream 的一个成员函数,都是被ofstream所继承。而read 是istream 的一个成员函数,被ifstream 所继承。类 fstream 的对象同时拥有这两个函数。它们的原型是:

 1 write ( char * buffer, streamsize size ); 2 read ( char * buffer, streamsize size ); 

这里 buffer 是一块内存的地址,用来存储或读出数据。参数size 是一个整数值,表示要从缓存(buffer)中读出或写入的字符数。

1 // reading binary file 2 #include 3 #include 4 using namespace std; 5 6 const char * filename = "test.txt"; 7 8 int main() { 9 char * buffer; 10 long size; 11 ifstream in(filename, ios::in | ios::binary | ios::ate); 12 size = in.tellg(); 13 in.seekg(0, ios::beg); 14 buffer = new char[size]; 15 in.read(buffer, size); 16 in.close(); 17 for (int i = 0; i < size; i++) 18 { 19 if (buffer[i] != '\0') 20 cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3