国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
C++中的文件輸入/輸出(5):二進制文件的處理

C++中的文件輸入/輸出(5)

原作:Ilia Yordanov,  loobian@cpp-home.com

 

二進制文件的處理

 

雖然有規(guī)則格式(formatted)的文本(到目前為止我所討論的所有文件形式)非常有用,但有時候你需要用到無格式(unformatted)的文件——二進制文件。它們和你的可執(zhí)行程序看起來一樣,而與使用<<>>操作符創(chuàng)建的文件則大不相同。get()函數(shù)與put()函數(shù)則賦予你讀/寫無規(guī)則格式文件的能力:要讀取一個字節(jié),你可以使用get()函數(shù);要寫入一個字節(jié),則使用put()函數(shù)。你應(yīng)當回想起get()——我曾經(jīng)使用過它。你可能會疑惑為什么當時我們使用它時,輸出到屏幕的文件內(nèi)容看起來是文本格式的?嗯,我猜這是因為我此前使用了<<>>操作符。

 

譯注:作者的所謂“規(guī)則格式文本(formatted text)”即我們平時所說的文本格式,而與之相對的“無格式文件(unformatted files)”即以存儲各類數(shù)據(jù)或可執(zhí)行代碼的非文本格式文件。通常后者需要讀入內(nèi)存,在二進制層次進行解析,而前者則可以直接由預(yù)定好的<<>>操作符進行讀入/寫出(當然,對后者也可以通過恰當?shù)刂剌d<<>>操作符實現(xiàn)同樣的功能,但這已經(jīng)不是本系列的討論范圍了)。

 

get()函數(shù)與都各帶一個參數(shù):一個char型變量(譯注:指get()函數(shù))或一個字符(譯注:指put()函數(shù),當然此字符也可以以char型變量提供)。

假如你要讀/寫一整塊的數(shù)據(jù),那么你可以使用read()write()函數(shù)。它們的原型如下:

 

istream &read(char *buf, streamsize num);

ostream &write(const char *buf, streamsize num);

 

對于read()函數(shù),buf應(yīng)當是一個字符數(shù)組,由文件讀出的數(shù)據(jù)將被保存在這兒。對于write()函數(shù),buf是一個字符數(shù)組,它用以存放你要寫入文件的數(shù)據(jù)。對于這兩個函數(shù),num是一個數(shù)字,它指定你要從文件中讀取/寫入的字節(jié)數(shù)。

假如在讀取數(shù)據(jù)時,在你讀取“num”個字節(jié)之前就已經(jīng)到達了文件的末尾,那么你可以通過調(diào)用gcount()函數(shù)來了解實際所讀出的字節(jié)數(shù)。此函數(shù)會返回最后一次進行的對無格式文件的讀入操作所實際讀取的字節(jié)數(shù)。

在給出示例代碼之前,我要補充的是,如果你要以二進制方式對文件進行讀/寫,那么你應(yīng)當將ios::binary作為打開模式加入到文件打開的參數(shù)表中。

現(xiàn)在就讓我向你展示示例代碼,你會看到它是如何運作的。

 

示例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的內(nèi)容寫入文件

 

    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!存入數(shù)組

 

    File.write(arr,5); // 將前5個字符——"Hello"寫入文件

 

    File.seekg(ios::beg); // 定位至文件首部

 

    static char read_array[10]; // 在此我將打算讀出些數(shù)據(jù)

 

    File.read(read_array,3); // 讀出前三個字符——"Hel"

 

    cout << read_array << endl; // 將它們輸出  

 

    File.close();

}



本文引用通告地址: http://blog.csdn.net/Kusk/services/trackbacks/7382.aspx
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C/C++文件流的操作
c/C++ 文件讀寫 收集備用
c語言中文件的操作
第十三章 文 件
C++中的文件操作
C/C++輸入輸出流總結(jié)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服