第九章 檔案讀寫

      在〈第九章 檔案讀寫〉中尚無留言

處理類別

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;
}

發佈留言