设为首页 加入收藏

TOP

C++文件读写详解(三)
2014-03-10 12:53:24 来源: 作者: 【 】 浏览:266
Tags:文件 读写 详解

 

  以下例子使用这些函数来获得一个二进制文件的大小:

  [cpp] view plaincopyprint

  // obtaining file size

  #include

  #include

  const char * filename = "test.txt";

  int main () {

  long l,m;

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

  l = in.tellg();

  in.seekg (0, ios::end);

  m = in.tellg();

  in.close();

  cout << "size of " << filename;

  cout << " is " << (m-l) << " bytes.\n";

  return 0;

  }

  //结果:

  size of example.txt is 40 bytes.

  4.二进制文件

  在二进制文件中,使用<< 和>>,以及函数(如getline)来操作符输入和输出数据,没有什么实际意义,虽然它们是符合语法的。

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

  write ( char * buffer, streamsize size );

  read ( char * buffer, streamsize size );

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

  [cpp] view plaincopyprint

  // reading binary file

  #include

  #include

  const char * filename = "test.txt";

  int main () {

  char * buffer;

  long size;

  ifstream in (filename, ios::in|ios::binary|ios::ate);

  size = in.tellg();

  in.seekg (0, ios::beg);

  buffer = new char [size];

  in.read (buffer, size);

  in.close();

  cout << "the complete file is in a buffer";

  delete[] buffer;

  return 0;

  }

  //运行结果:

  The complete file is in a buffer

  5.缓存和同步(Buffers and Synchronization)

  当我们对文件流进行操作的时候,它们与一个streambuf 类型的缓存(buffer)联系在一起。这个缓存(buffer)实际是一块内存空间,作为流(stream)和物理文件的媒介。例如,对于一个输出流, 每次成员函数put (写一个单个字符)被调用,这个字符不是直接被写入该输出流所对应的物理文件中的,而是首先被插入到该流的缓存(buffer)中。

  当缓存被排放出来(flush)时,它里面的所有数据或者被写入物理媒质中(如果是一个输出流的话),或者简单的被抹掉(如果是一个输入流的话)。这个过程称为同步(synchronization),它会在以下任一情况下发生:

  当文件被关闭时: 在文件被关闭之前,所有还没有被完全写出或读取的缓存都将被同步。

  当缓存buffer 满时: 缓存Buffers 有一定的空间限制。当缓存满时,它会被自动同步。

  控制符明确指明: 当遇到流中某些特定的控制符时,同步会发生。这些控制符包括:flush 和endl。

  明确调用函数sync(): 调用成员函数sync() (无参数)可以引发立即同步。这个函数返回一个int 值,等于-1 表示流没有联系的缓存或操作失败。

        

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++:关于const类型 下一篇C++ AO读取shapefile的属性值

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·HTTPS 详解一:附带 (2025-12-26 02:20:37)
·TCP/IP协议到底在讲 (2025-12-26 02:20:34)
·TCP和UDP在socket编 (2025-12-26 02:20:32)
·有没有适合新手练习 (2025-12-26 01:48:47)
·用清华镜像网怎么下 (2025-12-26 01:48:44)