发布日期:2015-12-08 13:33 来源: 标签: 编程语言 C++教程 C++输入输出流 C++二进制文件
本章我们主要学习C++中如何对二进制文件进行处理?如何使用get()和put()、read()和write()?下面我们就做一下具体讲解,希望大家多多支持中国站长网络学院。
二进制文件的处理
 虽然有规则格式(formatted)的文本(到目前为止我所讨论的所有文件形式)非常有用,但有时候你需要用到无格式(unformatted)的文件——二进制文件。它们和你的可执行程序看起来一样,而与使用<<及>>操作符创建的文件则大不相同。get()函数与put()函数则赋予你读/写无规则格式文件的能力:要读取一个字节,你可以使用get()函数;要写入一个字节,则使用put()函数。你应当回想起get()——我曾经使用过它。你可能会疑惑为什么当时我们使用它时,输出到屏幕的文件内容看起来是文本格式的?嗯,我猜这是因为我此前使用了<<及>>操作符。
get()函数与都各带一个参数:一个char型变量(译注:指get()函数)或一个字符(译注:指put()函数,当然此字符也可以以char型变量提供)。
假如你要读/写一整块的数据,那么你可以使用read()和write()函数。它们的原型如下:
 istream &read(char *buf, streamsize num);
ostream &write(const char *buf, streamsize num);
对于read()函数,buf应当是一个字符数组,由文件读出的数据将被保存在这儿。对于write()函数,buf是一个字符数组,它用以存放你要写入文件的数据。对于这两个函数,num是一个数字,它指定你要从文件中读取/写入的字节数。
假如在读取数据时,在你读取“num”个字节之前就已经到达了文件的末尾,那么你可以通过调用gcount()函数来了解实际所读出的字节数。此函数会返回最后一次进行的对无格式文件的读入操作所实际读取的字节数。
在给出示例代码之前,我要补充的是,如果你要以二进制方式对文件进行读/写,那么你应当将ios::binary作为打开模式加入到文件打开的参数表中。
现在就让我向你展示示例代码,你会看到它是如何运作的。
示例1:使用get( )和put( )
#include <fstream.h>
void main()
{
    fstream File("test_file.txt",ios::out | ios::in | ios::binary);
    char ch;
    ch='o';
    File.put(ch); // 将ch的内容写入文件
    File.seekg(ios::beg); // 定位至文件首部
    File.get(ch); // 读出一个字符
    cout << ch << endl; // 将其显示在屏幕上
    File.close();
}
示例2:使用read( )和write( )
#include <fstream.h>
#include <string.h>
void main()
{
    fstream File("test_file.txt",ios::out | ios::in | ios::binary);
    char arr[13];
    strcpy(arr,"Hello World!"); //将Hello World!存入数组
    File.write(arr,5); // 将前5个字符——"Hello"写入文件
    File.seekg(ios::beg); // 定位至文件首部
    static char read_array[10]; // 在此我将打算读出些数据
    File.read(read_array,3); // 读出前三个字符——"Hel"
    cout << read_array << endl; // 将它们输出   
    File.close();
}

相关评论

专题信息
    C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。最新正式标准C++于2014年8月18日公布。 其编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最受广大程序员受用的最强大编程语言之一,支持类:类、封装、重载等特性! 本教程从基础讲解了C++语言,希望对大家有所帮助,望多多支持中国站长网络学院。