處理類別
C++處理檔案的類別為ifstream(檔案輸入), ofstream(檔案輸出), fstream(檔案輸出入). 輸入是指讀入程式的意思, 輸出是指由程式寫入檔案
使用fstream, 需宣告一個物件, 再由此物件進行檔案串流操作
fstream file;
開啟檔案
使用fsteam的open(參數1, 參數2)函數進行開檔, 參數1為檔案名稱, 第2參數為開啟模式. 開啟模式如下
模式參數 | 用途 |
ios::in | 檔案開啟為讀取(輸入)狀態 |
ios::out | 檔案開啟為寫入(輸出)狀態 |
ios::ate | 從檔案結尾讀取(輸入)及寫入(輸 出)資料 |
ios::app | 從檔案結尾寫入(輸出)資料 |
ios::trunc | 如果檔案存在,就清除檔案 內容的資料 |
ios::nocreat | 若開啟檔案時,檔案不存 在,則產生錯誤 |
ios::noreplace | 若開啟檔案時,檔案存在, 且ate與app為被設定,則產生錯誤 |
ios::binary | 以二進位模式開啟檔案,預 設的檔案模式為文字模式 |
模式若有二個或以上, 使用 | 隔開, 如
file.open(“d:\\test.jpg”, ios::in|ios::binary);
常用函數
函數 | 說明 |
open(str,mode) | 以mode模式開啟名為str的檔案 |
close( ) | 關閉檔案 |
is_open( ) | 檢查檔案是否為開啟狀態, 若是則傳回true,否則傳回flase |
write(str,size) | 將str陣列中size個字元寫入到檔案中 |
read(str,size) | 從檔案中讀取資料至檔案結 尾為止設定給str陣列,但至多不超過size個 字元 |
get(char) | 從檔案中讀取一個字元 |
以下程式為將二進位檔案轉換成16進位
#include <iostream> #include <fstream> using namespace std; fstream file; int main(){ int index=0; fstream file; file.open("d:\\test.jpg", ios::in|ios::binary); char buff[20]; if (!file){ cout<<"fail"<<endl; } else{ while(!file.eof()){ for (int i=0;i<20;i++)buff[i]=0; file.read(buff, sizeof(buff)); printf("%08d ",index); for (int i=0;i<20;i++){ printf("%02x ", buff[i]&0xff); } index+=20; printf("\n"); } } system("pause"); return 0; }