VC中檔案操作的幾種方式(1,2)

2021-06-03 06:54:08 字數 3954 閱讀 6666

第6章  使用檔案訪問物件

檔案可以用來儲存一張《清明上河圖》,一曲《春江花月夜》,當然也可以儲存一部《紅樓夢》,檔案的內容依賴於應用程式來解釋。幾乎所有的作業系統都通過檔案的介面允許使用者儲存、管理資料。所以,我們理所當然把檔案當做資料訪問介質的第一選擇。

6.1  檔案操作的幾種方式

操作計算機的人都會接觸到檔案,檔案的操作通常包括檔案的讀取、修改,有的時候我們還需要對檔案進行外部管理,包括檔案複製、刪除及屬性設定等。

6.1.1  使用crt函式std::f***()

檔案操作可以採用c語言執行時期庫來完成,crt提供的f***()函式如表6-1所示。

表6-1  crt檔案操作函式

函式含義

fopen

開啟指定檔名的檔案

fread

從檔案中讀取指定長度的資料

fwrite

向檔案中寫入指定的資料

fclose

關閉檔案

feof

判斷是否達到檔案結尾

fgetc

從文字檔案中讀取乙個字元

fgets

從文字檔案中讀取乙個字串

fputc

向文字檔案中寫入乙個字元

fputs

向文字檔案中寫入乙個字串

當我們開啟、建立乙個檔案時,常常需要呼叫fopen()函式,該函式的原型為:

file*fopen(constchar*filename,constchar*mode   ); 

引數解釋

filename:指定檔案的檔名,如test.out。

mode:指定檔案的操作方式,如表6-2所示。

表6-2  fopen檔案操作方式

標誌含義

r讀模式,如果檔案不存在則會失敗

w寫模式,如果檔案已存在則會清空其內容

a追加模式,寫入的內容追加在原有內容之後,

如果檔案不存在則會自動建立

r+讀寫模式(檔案必須存在)

w+讀寫模式,如果檔案已存在則會清空其內容

a+讀+追加模式

t文字方式

b二進位制方式

ccs=encoding

檔案編碼方式,可指定

encoding 

為utf-8

、utf-16le

、unicode

檔案的操作方式可以是如上標誌的組合,如:r+b。當採用"ccs=encoding"時,我們需要在前面新增乙個","作為分隔。如我們以讀寫方式、unicode編碼開啟某個檔案:

fopen("newfile.txt", "rw, ccs=unicode"); 

如下羅列出使用crt函式進行檔案操作的流程。

使用fopen()建立、開啟檔案,返回乙個檔案指標file *;

以file *作為引數,呼叫fread()、fwrite()等操作函式完成對檔案的讀寫。fread()、fwrite()函式的原型為:

size_tfread(void*buffer,size_tsize,size_tcount,file*stream   );size_tfwrite(constvoid*buffer,size_tsize,size_tcount,file*stream   ); 

呼叫fclose()關閉檔案指標。

使用crt操作檔案流程如圖6-1所示。

650) this.width=650;" height=303 big(this)?>

6.1.2  使用標準c++庫std::fstream

標準c++操作檔案主要是通過檔案流fstream來完成的。檔案輸入/輸出流用以實現檔案讀取和儲存的操作,這種基於流的檔案操作如圖6-2所示。

650) this.width=650;" height=235 big(this)?>

和檔案有關係的輸入/輸出類主要在標頭檔案中被定義。在這個標頭檔案中主要定義了3個類。由這3個類控制對檔案的各種輸入/輸出操作,它們分別是ifstream、ofstream、fstream。其中fstream類是由iostream類派生而來的,它們之間的繼承關係如圖6-3所示。

ofstream out("test.out");  out << "hello, world!"; 

650) this.width=650;" height=364 big(this)?>

除流操作符之外,fstream提供的檔案操作函式如表6-3所示。

表6-3

fstream

檔案操作函式

函式含義

open

開啟檔案

close

關閉檔案

is_open

判斷當前檔案是否已開啟

其中,open()函式具有多個原型:

voidopen(constchar*_filename,      ios_base::openmode _mode = ios_base::in | ios_base::out,int_prot = (int)ios_base::_openprot  );voidopen(constchar*_filename,      ios_base::openmode _mode  );voidopen(constwchar_t*_filename,      ios_base::openmode _mode = ios_base::in | ios_base::out,int_prot = (int)ios_base::_openprot  );voidopen(constwchar_t*_filename,      ios_base::openmode _mode  ); 

引數ios_base::openmode用以指定檔案的開啟方式,可以是如表6-4所示的標誌的組合。

表6-4

ios_base::openmode

標誌標誌

含義追加模式(

),新輸出的內容追加在原檔案內容的後面

ios::ate

檔案開啟後定位到檔案尾,

就包含此屬性

ios::binary

以二進位制方式開啟檔案,預設的方式是文字方式

ios::in

檔案以輸入方式開啟

ios::out

檔案以輸出方式開啟

ios::trunc

截斷模式(

truncate

),如果檔案存在,則把檔案長度設為

0ios::nocreate

如果檔案不存在則不建立

ios::noreplace

如果檔案已存在則不替換

如下羅列出使用fstream類進行檔案操作的流程。

呼叫fstream::fopen()建立、開啟檔案。

通過流操作,使用fstream完成輸入/輸出,如:out << "hello, world!"。

呼叫fstream::close()關閉檔案。

VC中檔案操作的幾種方式(1,2)

第6章 使用檔案訪問物件 檔案可以用來儲存一張 清明上河圖 一曲 春江花月夜 當然也可以儲存一部 紅樓夢 檔案的內容依賴於應用程式來解釋。幾乎所有的作業系統都通過檔案的介面允許使用者儲存 管理資料。所以,我們理所當然把檔案當做資料訪問介質的第一選擇。6.1 檔案操作的幾種方式 操作計算機的人都會接觸...

VC中檔案操作的幾種方式(1,2)

第6章 使用檔案訪問物件 檔案可以用來儲存一張 清明上河圖 一曲 春江花月夜 當然也可以儲存一部 紅樓夢 檔案的內容依賴於應用程式來解釋。幾乎所有的作業系統都通過檔案的介面允許使用者儲存 管理資料。所以,我們理所當然把檔案當做資料訪問介質的第一選擇。6.1 檔案操作的幾種方式 操作計算機的人都會接觸...

VC中檔案的操作

各種關於檔案的操作在程式設計中是十分常見,如果能對其各種操作都瞭如指掌,就可以根據實際情況找到最佳的解決方案,從而在較短的時間內編寫出高效的 因而熟練的掌握檔案操作是十分重要的。本文將對visual c 中有關檔案操作進行全面的介紹,並對在檔案操作中經常遇到的一些疑難問題進行詳細的分析。1 檔案的查...