第十章 對檔案的輸入輸出

2021-08-04 13:13:59 字數 2806 閱讀 1666

c語言輸入輸出函式

1. fopen()函式 

fopen函式用於開啟檔案, 其呼叫格式為: 

file *fopen(char *filename, *type); 

在介紹這個函式之;前, 先了解一下下面的知識。 

(1) 流(stream)和檔案(file) 

流和檔案 在turbo c2.0中是有區別的, turbo c2.0 為程式設計者和被訪問的設 

備之間提供了一層抽象的東西, 稱之為"流", 而將具體的實際裝置叫做檔案。 

流是乙個邏輯裝置, 具有相同的行為。因此, 用來進行磁碟檔案寫的函式也同樣 

可以用來進行印表機的寫入。在turbo c2.0中有兩種性質的流:     文字流( text 

stream)和二進位制(binary stream)。對磁碟來說就是文字檔案和二進位制檔案。本 

軟體為了便於讓讀者易理解turbo c2.0語言而沒有對流和檔案作特別區分。 

(2) 檔案指標file 

實際上file是乙個新的資料型別。它是turbo c2.0的基本資料型別的集合, 

稱之為結構指標。有關結構的概念將在第四節中詳細介紹, 這裡只要將file理解 

為乙個包括了檔案管理有關資訊的資料結構, 即在開啟檔案時必須先定義乙個文 

件指標。

(3) 以後介紹的函式呼叫格式將直接寫出形式引數的資料型別和函式返回值 

的資料型別。例如: 上面開啟檔案的函式, 返回乙個檔案指標, 其中形式引數有 

兩個, 均為字元型變數(字串陣列或字串指標)。

現在再來看開啟檔案函式的用法。 

fopen()函式中第乙個形式引數表示檔名, 可以包含路徑和檔名兩部分。 

如: "b:test.dat" 

"c:\\tc\\test.dat" 

如果將路徑寫成"c:\tc\test.dat"是不正確的, 這一點要特別注意。 

第二個形式引數表示開啟檔案的型別。關於檔案型別的規定參見下表。 

表    檔案操作型別 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

字元                  含義 

──────────────────────────── 

"r"             開啟文字檔案唯讀 

"w"             建立文字檔案只寫 

"a"             增補, 如果檔案不存在則建立乙個 

"r+"            開啟乙個文字檔案讀/寫 

"w+"            建立乙個文字檔案讀/寫 

"a+"            開啟或建立乙個檔案增補 

"b"             二進位制檔案(可以和上面每一項合用) 

"t"             文這檔案(預設項) 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

如果要開啟乙個ccdos子目錄中, 檔名為clib的二進位制檔案, 可寫成: 

fopen("c:\\ccdos\\clib", "rb"); 

如果成功的開啟乙個檔案, 

fopen()函式返回檔案指標,否則返回空指標(null)。

由此可判斷檔案開啟是否成功。

2. fclose()函式 

fclose()函式用來關閉乙個由fopen()函式開啟的檔案 , 其呼叫格式為: 

int fclose(file *stream); 

該函式返回乙個整型數。

當檔案關閉成功時, 返回0, 否則返回乙個非零值。

可以根據函式的返回值判斷檔案是否關閉成功。

有關檔案操作的函式

本節所涉及到的檔案讀寫函式均是指順序讀寫,即讀寫了一條資訊後,指標自動 

加1。下面分別介紹寫操作函式和讀操作函式。 

1. 檔案的順序寫函式

fprintf()、fputs()和fputc()函式 均為檔案的順序寫操作函式,其呼叫格式如下: 

int fprintf(file *stream, char *format, ); 

int fputs(char *string, file *steam); 

int fputc(int ch, file *steam); 

上述三個函式的

返回值均為整型量

。fprintf() 函式的返回值為實際寫入檔案中的字元個數(位元組數)。如果

寫錯誤, 則返回乙個負數

;fputs()函式返回

0時表明將string指標所指的字串寫入檔案中的操作成功, 

返回非0

時,表明寫操作失敗。

fputc()函式返回乙個向檔案所寫

字元的值, 此時寫操作成功,

否則返回eof

(檔案結束結束其值為-1, 在stdio.h中定義)表示寫操作錯誤。 

fprintf( ) 函式中格式化的規定與printf( ) 函式相同,所不同的只是fprintf()函式是向檔案中寫入。而printf()是向螢幕輸出。 

下面介紹乙個例子, 執行後產後乙個test.dat的檔案。 

例11: 

#include 

main() 

用dos的type命令顯示test.dat的內容如下所示: 

螢幕顯示 

your score of toefl is: 617 

that's good news 

如果感興趣的話可以去網上尋找更全面的資料進行了解。

第十章 函式

使用def關鍵字 定義個數可變的位置形參 定義個數可變的關鍵字形參 定義預設值引數 定義個數可變的位置形參 deffun1 args 結果為乙個元組 print args fun1 10,20,30 10,20,30 定義個數可變的關鍵字形參 deffun2 args 結果為乙個字典 print a...

第十章 屬性

z屬性 本章也比較簡單稍作介紹 無參屬性就是我們常見的屬性 可以封裝屬性 以執行緒安全方式訪問 有參屬性就是c 中的所引器 匿名型別 如圖遇到如下 具體點就是 上面的注釋也已經講清楚了,定義的型別之後,構造例項,然後初始化屬性。現在詳細說下 編譯器接收到 上圖 先用var 定義乙個型別,但是不具體指...

第十章 屬性

目錄 10.1 無參屬性 10.2 有參屬性 10.3 呼叫屬性訪問器方法時的效能 10.4 屬性訪問器的可訪問性 10.5 泛型屬性訪問器方法 物件導向設計和程式設計的重要原則之一就是資料封裝,意味著型別的字段不應該公開,否則很容易因為不恰單使用欄位而破壞物件的狀態。可將屬性想象成智慧型字段,即背...