学学习网 手机版

学学习网

学习路径: 学习首页 > 应用开发 > c++ >

第八节 C++ 标准函数库(3)

设置字体:
----------------------------------

以下例子使用这些函数来获得一个二进制文件的大小:
    // obtaining file size
    #include <iostream.h>
    #include <fstream.h>
   
    const char * filename = "example.txt";
   
    int main () {
        long l,m;
        ifstream file (filename, ios::in|ios::binary);
        l = file.tellg();
        file.seekg (0, ios::end);
        m = file.tellg();
        file.close();
        cout << "size of " << filename;
        cout << " is " << (m-l) << " bytes.\n";
        return 0;
    }
                      
size of example.txt is 40 bytes.
 
二进制文件(Binary files)
在二进制文件中,使用<< 和>>,以及函数(如getline)来操作符输入和输出数据,没有什么实际意义,虽然它们是符合语法的。
文件流包括两个为顺序读写数据特殊设计的成员函数:write 和 read。第一个函数 (write) 是ostream 的一个成员函数,都是被ofstream所继承。而read 是istream 的一个成员函数,被ifstream 所继承。类 fstream 的对象同时拥有这两个函数。它们的原型是:
write ( char * buffer, streamsize size );
read ( char * buffer, streamsize size );
这里 buffer 是一块内存的地址,用来存储或读出数据。参数size 是一个整数值,表示要从缓存(buffer)中读出或写入的字符数。
    // reading binary file
    #include <iostream>
    #include <fstream.h>
   
    const char * filename = "example.txt";
   
    int main () {
        char * buffer;
        long size;
        ifstream file (filename, ios::in|ios::binary|ios::ate);
        size = file.tellg();
        file.seekg (0, ios::beg);
        buffer = new char [size];
        file.read (buffer, size);
        file.close();
       
        cout << "the complete file is in a buffer";
       
        delete[] buffer;
        return 0;
    }
                      
The complete file is in a buffer
 
缓存和同步(Buffers and Synchronization)
当我们对文件流进行操作的时候,它们与一个streambuf 类型的缓存(buffer)联系在一起。这个缓存(buffer)实际是一块内存空间,作为流(stream)和物理文件的媒介。例如,对于一个输出流,每次成员函数put (写一个单个字符)被调用,这个字符不是直接被写入该输出流所对应的物理文件中的,而是首先被插入到该流的缓存(buffer)中。
当缓存被排放出来(flush)时,它里面的所有数据或者被写入物理媒质中(如果是一个输出流的话),或者简单的被抹掉(如果是一个输入流的话)。这个过程称为同步(synchronization),它会在以下任一情况下发生:
  • 当文件被关闭时: 在文件被关闭之前,所有还没有被完全写出或读取的缓存都将被同步。
  • 当缓存buffer 满时:
----------------------------------
  • 学学习
  • 需帮助 请留言
课程列表
重点难点
赞助链接