C++中的檔案輸入/輸出(5):二進位制檔案的處理 (轉)
C++中的輸入/輸出(5):namespace prefix = o ns = "urn:schemas--com::office" />
原作:Ilia Yordanov, to:loobian@cpp-home.com">loobian@cpp-home.com
二進位制檔案的處理
雖然有規則格式(formatted)的文字(到目前為止我所討論的所有檔案形式)非常有用,但有時候你需要用到無格式(unformatted)的檔案——二進位制檔案。它們和你的可看起來一樣,而與使用<>運算子建立的檔案則大不相同。get()與put()函式則賦予你讀/寫無規則格式檔案的能力:要讀取一個位元組,你可以使用get()函式;要寫入一個位元組,則使用put()函式。你應當回想起get()——我曾經使用過它。你可能會疑惑為什麼當時我們使用它時,輸出到螢幕的檔案內容看起來是文字格式的?嗯,我猜這是因為我此前使用了<>運算子。
譯註:作者的所謂“規則格式文字(formatted text)”即我們平時所說的文字格式,而與之相對的“無格式檔案(unformatted files)”即以各類資料或可執行程式碼的非文字格式檔案。通常後者需要讀入,在二進位制層次進行解析,而前者則可以直接由預定好的<>運算子進行讀入/寫出(當然,對後者也可以透過恰當地過載<>運算子實現同樣的功能,但這已經不是本系列的討論範圍了)。
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
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
#include
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();
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-984461/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 檔案輸入輸出處理(二)-位元組流
- Git處理二進位制檔案Git
- mysqlbinlog 處理二進位制日誌檔案的工具MySql
- python:檔案的輸入與輸出Python
- C++輸入十進位制數,輸出對應二進位制數、十六進位制數C++
- 排序,檔案輸入輸出排序
- 前端怎麼處理二進位制檔案下載前端
- 第10章 對檔案的輸入輸出
- 如何把十進位制的數輸入用二進位制全加器,並以十進位制輸出
- 使用 IDA 處理 U-Boot 二進位制流檔案boot
- Linux 下的檔案管理&管理系統中的輸出輸入Linux
- 瞭解下C# 檔案的輸入與輸出C#
- 檔案輸入和輸入出處理(六)-序列化和反序列化
- C++ 讀取二進位制檔案到char*C++
- 輸出二進位制數
- MySQL二進位制檔案(binlog)MySql
- 如何將日誌檔案和二進位制檔案快速匯入HDFS?
- 根據介面返回的二進位制流匯出檔案
- 介面返回二進位制檔案的下載。
- 二進位制檔案視覺化(二)視覺化
- 檔案操作(二進位制拷貝)
- od 轉儲 二進位制檔案常用命令
- 什麼是極速檔案傳輸,極速檔案傳輸如何進行大檔案傳輸
- 6.3建立自己執行的二進位制檔案
- printf與scanf如何輸出、輸入十六進位制與八進位制數
- printf()將10進位制數安照輸出16進位制,8進位制輸出
- 大檔案如何傳輸,大檔案的傳輸方式有哪些?
- C語言資料型別、變數的輸入和輸出、進位制轉換C語言資料型別變數
- MySQL輸出html格式檔案MySqlHTML
- 教你如何在C++二進位制檔案中注入git資訊C++Git
- 二進位制檔案記憶體對映記憶體
- 二進位制檔案安裝安裝etcd
- C語言實現檔案複製功能(包括文字檔案和二進位制檔案)C語言
- 判斷檔案為文字檔案還是二進位制檔案(C語言實現)C語言
- 使用MFT進行加密檔案傳輸的7個好處加密
- csv跨域傳輸再生成csv檔案處理跨域
- 二進位制檔案和符號檔案(PDB)如何校驗是否匹配符號
- 文盤Rust -- 如何把配置檔案打包到二進位制檔案裡Rust
- 檔案傳輸協議的五種安全檔案傳輸替代方案協議