C 之檔案操作(fstream)

2021-08-17 10:39:18 字數 4465 閱讀 5889

關於檔案的操作,屬於c++的io

範疇。

一、在c++中,對檔案的操作是通過stream的子類fstream(file stream)來實現的,就必須加入標頭檔案fstream.h。

#include

using 

namespace

std;

二、開啟檔案

fstream類中,有乙個成員函式open(),就是用來開啟檔案的,其原型是:

void open(const char* filename, int mode, int access);    

引數:filename

:  開啟的檔名

mode

:    開啟檔案的方式

access

:   開啟檔案的屬性

開啟檔案的方式

:在類ios(是所有流式i/o類的基類)中定義,常用的值如下:

ios::binary:  以二進位制

方式開啟檔案,預設的方式是文字方式。兩種方式的區別見前文 

ios::in:    檔案以輸入方式開啟 

ios::out:   檔案以輸出方式開啟 

ios::nocreate: 不建立檔案,所以檔案不存在時開啟失敗  

ios::noreplace:不覆蓋檔案,所以開啟檔案時如果檔案存在失敗 

ios::trunc:  如果檔案存在,把檔案長度設為0 

可以用「或」把以上屬性連線起來,如ios::out|ios::binary

開啟檔案的屬性:0

:普通檔案,開啟訪問

1:唯讀檔案

2:隱含檔案

4:系統檔案

可以用「或」或者「+」把以上屬性連線起來 ,如3或1|2就是以唯讀和隱含屬性開啟檔案。

舉例:以二進位制輸入方式開啟檔案c盤下的config.sys檔案:

fstream file1;

file1.open(

"c:\\config.sys"

, ios::binary |ios::in, 0);  

或者 file1.open(

"c:/config.sys"

, ios::binary |ios::in, 0);

如果open函式只有檔名乙個引數,則是以讀/寫普通檔案開啟:

file1.open("c:/config.sys");<=>file1.open("c:/config.sys",ios::in|ios::out,0);

對於fstream的建構函式具有和open函式一樣的作用,在定義的時侯可以可以開啟檔案

:fstream file1("c:/config.sys");

注:fstream有兩個子類:ifstream(inputfile stream)ofstream(outpufile stream)

ifstream預設以輸入方式開啟檔案,而ofstream預設以輸出方式開啟檔案。

ifstream file2("c:/pdos.def");//

以輸入方式開啟檔案

ofstream file3("c:/x.123");   //以輸出方式開啟檔案

可以視情況選擇需要的開啟方式!!!

三、關閉檔案

開啟的檔案使用完成後一定要關閉,fstream

提供了成員函式close()來完成此操作,如:file1.close();

就把file1相連的檔案關閉。

四、讀寫檔案

讀寫檔案分為文字檔案和二進位制

檔案的讀寫

,對於文字檔案的讀寫

比較簡單,用插入器(<<)

和析取器(>>)就可以了:

1、文字檔案的讀寫

① 文字檔案的讀寫很簡單:用插入器(<<)向檔案輸出;用析取器(>>)從檔案輸入。

舉例:file1

是以輸入方式開啟,file2以輸出開啟。

file2<<"ilove you";//

向檔案寫入字串"i love you"

int i;

file1>>i;//從檔案輸入乙個整數值。

這種方式還有一種簡單的格式化能力,比如可以指定輸出為16進製制等等,具體的格式有以下一些:

操縱符                                 功能                              輸入/輸出

dec                    

格式化為十進位制數值資料                輸入和輸出

endl                   

輸出乙個換行符並重新整理此流                輸出

ends                    

輸出乙個空字元                               輸出

hex                    

格式化為十六進製制數值資料             輸入和輸出

oct                    

格式化為八進位制數值資料                 輸入和輸出

setpxecision(int p)          

設定浮點數的精度位數                      輸出

② 文字檔案的獲取一行的操作是:

istream &getline( char *buffer, streamsize num ); 

用getline()讀取字元到buffer中,buffer在**中通常體現為乙個字元陣列,streamsize num

是一次讀入多少個

字元,   num - 1個字元已經讀入。

istream &getline( char *buffer, streamsize num, char delim );

當碰到乙個換行標誌,  碰到乙個eof,  或者任意地讀入,直到讀到字元delim。delim字元不會

被放入buffer中。

delim字元可以自已設定,預設為回車符'/n' 。

2、二進位制

檔案的讀寫

讀寫字元

put()

put()

函式向流寫入乙個字元,其原型是ofstream&put(char ch),使用也比較簡單,如file1.put('c');就是

向流寫乙個字元'c'。

get()

get()函式比較靈活,有3種常用的過載形式:

一種就是和put()對應的形式:ifstream&get(char &ch);功能是從流中讀取乙個字元,結果儲存在引用ch中,

如果到檔案尾,返回空字元。如file2.get(x);表示從檔案中讀取乙個字元,並把讀取的字元儲存在x中。

另一種過載形式的原型是: int get();這種形式是從流中返回乙個字元,如果到達檔案尾,返回eof,

如,x=file2.get();和上例功能是一樣的。

還有一種形式的原型是:ifstream &get(char *buf,int num,char delim=' ');這種形式把字元讀入由 buf 

指向的陣列,直到讀入了 num 個字元或遇到了由 delim 指定的字元,如果沒使用 delim 這個引數,將使用

預設值換行符' '。例如:  file2.get(str1,127,'a');//從檔案中讀取字元到字串str1,當遇到字元'a'或讀取

了127個字元時終止。

讀寫資料塊

要讀寫二進位制

資料塊,使用成員函式read()和write()成員函式,它們原型如下:

read(unsigned char *buf,int num);

write(const unsigned char *buf,int num);

read()從檔案中讀取

num 個字元到 buf 指向的快取中,如果在還未讀入 num 個字元時就到了檔案尾,

可以用成員函式int gcount();來取得實際讀取

的字元數;而 write() 從buf 指向的快取寫 num 個字元到

檔案中,值得注意的是快取的型別是unsigned char *,有時可能需要型別轉換。

例:unsigned charstr1="i love you";

int n[5];

ifstream in("***.***");

ofstream out("yyy.yyy");

out.write(str1,strlen(str1));//把字串str1全部寫到yyy.yyy中

in.read((unsigned char*)n,sizeof(n));//從***.***中

讀取

指定個整數,注意型別轉換

in.close();out.close();

C 檔案操作詳解 fstream

c 中對檔案操作需要包含標頭檔案fstream 操作檔案三大類 ofstream 寫操作 ifstream 讀操作 fstream 讀寫操作 寫檔案 主要步驟 包含標頭檔案 include 2.建立流物件 ofstream ofs 3.開啟檔案 ofs.open 檔案路徑 開啟方式 4.寫資料 of...

C 流操作之fstream

在windows平台對檔案進行訪問操作可選的方案有很多,如果採用純c,則需要用到file 等,當然也可以直接呼叫windows api來做 如果採用c 首先想到的就是檔案流fstream。雖然在com層面上,我們還可以使用istream來實現檔案的讀寫,其效率也非常高。不過本文僅對c 流操作做簡單的...

C 的FSTREAM類提供的檔案操作

c c 檔案操作 二 c 的fstream類提供的檔案操作 在c 中,有乙個stream這個類,所有的i o都以這個 流 類為基礎的,包括我們要認識的檔案 i o,stream這個類有兩個重要的運算子 1 插入器 向流輸出資料。比如說系統有乙個預設的標準輸出流 cout 一般情況下就是指的顯示器,所...