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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C++中的檔案輸入/輸出(2):讀取檔案 (轉)C++
- C++中的檔案輸入/輸出(3):掌握輸入/輸出流 (轉)C++
- 檔案輸入輸出處理(二)-位元組流
- 用shell處理二進位制檔案(轉)
- Git處理二進位制檔案Git
- C++中的檔案輸入/輸出(4):檢測輸入/輸出的狀態標誌 (轉)C++
- 【C++】標準檔案的輸入輸出!!!C++
- C++中的檔案輸入/輸出(1):你的第一個程式 (轉)C++
- C++輸入十進位制數,輸出對應二進位制數、十六進位制數C++
- 排序,檔案輸入輸出排序
- 檔案操作-輸入輸出
- Python進階02 文字檔案的輸入輸出Python
- MySQL 匯出匯入二進位制檔案MySql
- mysqlbinlog 處理二進位制日誌檔案的工具MySql
- python:檔案的輸入與輸出Python
- C++ 中輸入輸出流及檔案流操作筆記C++筆記
- c++ 二進位制儲存檔案C++
- C輸入輸出與檔案
- 前端怎麼處理二進位制檔案下載前端
- 如何把十進位制的數輸入用二進位制全加器,並以十進位制輸出
- 第10章 對檔案的輸入輸出
- 文字檔案與二進位制檔案的區別
- java_檔案輸入與輸出Java
- c++ 16進位制輸出C++
- Oracle建立二進位制檔案索引的方法(轉)Oracle索引
- 瞭解下C# 檔案的輸入與輸出C#
- 檔案輸入和輸入出處理(六)-序列化和反序列化
- Python 快速教程(進階篇02):文字檔案的輸入輸出Python
- Linux 下的檔案管理&管理系統中的輸出輸入Linux
- C++ 讀取二進位制檔案到char*C++
- C/C++ 二進位制讀寫 png 檔案C++
- C#的二進位制檔案操作C#
- 使用 IDA 處理 U-Boot 二進位制流檔案boot
- 二進位制檔案複製
- php寫二進位制檔案PHP
- 二進位制檔案拷貝
- 根據介面返回的二進位制流匯出檔案
- JAX-WS - 二進位制處理之MTOM(檔案上傳)