程式設計與C語言學習筆記 第九章檔案處理

2021-07-26 20:13:14 字數 4272 閱讀 7281

1. 文字檔案和二進位制檔案

1) 文字檔案(ascii檔案),基於字元編碼的檔案,常見的編碼有ascii編碼,unicode編碼等等;是一種定長編碼,每乙個位元組(ascii編碼),或兩個位元組(ubicode編碼)代表乙個字元。

2) 二進位制檔案,基於值編碼的檔案,是一種不定長的編碼,與資料在記憶體中的儲存方式一致。參考連線:

3) 文字檔案和二進位制檔案的區別及優缺點

(1) 二進位制檔案的儲存方式和記憶體是一致的,因此不需要轉換,就可以直接輸入和輸出;文字檔案則需要與二進位制檔案之間的轉換,才能輸入和輸出。因此二進位制檔案更加快速。

(2) 二進位制檔案相對文字檔案,占用的儲存空間小。

(3) 對於字元資訊,在文字檔案和二進位制檔案中,資料形式是一樣的;對於數值資料,二者是不同的。

2. 標準檔案

1) 標準輸入檔案:對應的指標為stdin,通過輸入流,將鍵盤等裝置的輸入,輸入到標準輸入檔案中,再輸入到記憶體中。

2) 標準輸出檔案:對應的指標為stdout,通過輸入流,將記憶體中的資料輸入到標準輸入檔案中,再通過輸出流,輸出到螢幕中。

3) 標準錯誤檔案:

4) 需要注意的問題:

1. 檔案的結構體型別(stdio.h中定義的)

typedef struct{

int level;//緩衝區被占用的程度

unsigned flags;//檔案狀態標記

char fd;//檔案描述符

unsigned char hold;//如無緩衝區,則不讀取字元

int bsize;//緩衝區的大小

unsigned char * buffer;//檔案緩衝區指標

unsigned char * curp;//檔案定位指標

unsigned istemp;//暫時檔案指示器

short token;//用於有效性檢查

}file;

2. 檔案指標的定義:file * fp;

1. 檔案的開啟:

《檔案指標》=fopen(《路徑名》\\《檔名》,《開啟方式》)

1) 《檔案指標》,file型別的指標;開啟成功,fopen返回所開啟檔案對應的檔案指標;開啟失敗,就返回null值。

2) 《路徑名》:如果檔案在當前路徑,可以省略;「\」要用轉義字元「\\」代替。

3) 《開啟方式》:

(1) 開啟方式:

[1] r:以唯讀方式開啟乙個已存在的文字檔案。

[4] r+:以讀/寫方式開啟乙個已存在的文字檔案。

[5] w+:以寫/讀方式開啟乙個新的文字檔案。

(2) 需要注意的問題:

[1] 預設是開啟文字檔案,若要開啟二進位制檔案,加引數b。

[2] 標準輸入檔案、標準輸出檔案和標準出錯檔案,系統會自動開啟,指向他們的檔案指標分別stdin、stdout、stderr。

2. 檔案的關閉:fclose(《檔案指標名》)

1) 關閉檔案,就是使檔案指標不再指向該檔案,它可以去指向其它檔案;關閉檔案還可以起來清除緩衝區的作用。

2) 關閉成功,則返回值0;關閉失敗則返回值eof(-1)。

1. 檔案的字元輸入函式fgetc和字元輸出函式fputc

1) 字元輸入函式:fgetc

(1) 呼叫格式:

《字元變數》=fgetc(檔案指標)

(2) 功能:從檔案指標所指的檔案中讀入乙個字元賦給字元變數。

(3) 需要注意的問題:

[1] 檔案結束判斷:文字檔案以-1作為結束標誌,二進位制檔案則不能。統一用feof(fp)函式判斷,結束則值為1,未結束為0。

[2] 標頭檔案stdio.h有定義:#define getchar() fgetc(stdin)

2) 字元輸出函式:fputc

(1) 呼叫格式:fputc(ch,《檔案指標》)

(2) 功能:把字元ch(變數或常量)放入《檔案指標》所指的檔案中。

(3) 需要注意的問題:

[1] #define putchar(ch) fputc(ch,stdout)

3) 用字元輸入/輸出函式處理檔案

2. 檔案的字串輸入/輸出函式fgets()和fputs()

1) 字串輸入函式:fgets

(1) 呼叫格式:fgets(str,n,fp)

(2) 功能:從fp所指檔案中讀取n-1個字元(留乙個給』\0』),並把它們放入str字元陣列中,並在最後自動新增乙個空字元』\0』。成功0,失敗-1。

(3) 需要注意的問題

[1] 當滿足下列條件之一時,讀取結束:

<1> 已經讀取了n-1個字元。

<2> 當前讀到的字元為回車符。

<3> 已經讀到檔案的末尾。

[2] fgets(str,n,stdin)!=gets(str),因為gets函式輸入時,是把回車符轉換成空字元』\0』加在字串尾部。而fgets是直接讀入回車符。

2) 字串輸出函式:fputs

(1) 呼叫格式:fputs(str,fp)

(2) 功能:把字串str放到fp所指的檔案中。成功0,失敗-1。

(3) 需要注意的問題:

[1] fputs(str,stdout)!=puts(str),因為puts()函式把字串尾部的』\0』變為回車符輸出,而fputs函式則是捨去』\0』。

3. 檔案的資料塊輸入/輸出函式fread和fwrite

1) 檔案的資料塊輸入函式:fread

(1) 呼叫格式:fread(buf,size,count,fp)

2) 檔案的資料塊輸出函式:fwrite

(1) 呼叫格式:fwrite(buf,size,count,fp)

3) 需要注意的問題:

4. 檔案的格式化輸入/輸出函式fscanf和fprintf

1) 檔案的格式化輸入函式:fscanf

(1) 呼叫格式:fscanf(《檔案指標》,《格式控制串》,輸入列表)。

(2) 功能:從檔案中格式化輸入資料到記憶體中,fscanf(fp,「%d%f」,&i,&x):表示從fp所指檔案中讀入乙個整數給i,讀入乙個浮點數給x。

(3) 需要注意的問題:

[1] fscanf(stdin,」…」,…)=scanf(「…」,…)

2) 檔案的格式化輸出函式:fprintf

(1) 呼叫格式:fprintf(《檔案指標》,《格式控制串》,輸入列表)。

(2) 功能:把記憶體中的資料格式化得輸出到檔案中,fprintf(fp,「%d」,i):把整數i寫入到fp所指的檔案中。

(3) 需要注意的問題:

[1] fscanf(stdout,」…」,…)=printf(「…」,…)

5. 檔案的輸入與輸出總結

1) 文字檔案和二進位制檔案的輸入/輸出

(1) 文字檔案:以文字方式開啟,輸入和輸出時使用如下函式:fgetc/fputc、fgets/fputs、fscanf/fprintf

(2) 二進位制檔案,以文字方式開啟,輸入和輸出使用fread/fwrite。

1. ftell函式

1) 呼叫格式:

《長整型變數》=ftell(《檔案指標》)

2) 功能:返回檔案定位指標的當前位置,即相對於檔案頭的位移量(長整型long),檔案頭的位置定為0,失敗返回-1l。

2. rewind函式

1) 呼叫格式:rewind(fp)

2) 功能:把fp所指檔案的定位指標拉回到檔案頭。

3. fseek函式

1) 呼叫格式:fseek(《檔案指標》,《位移量》,《起始點》)

(1) 《位移量》:相對起始點的位移量,長整型,在數字最後要加上「l」

(2) 《起始點》:

[1] 檔案開頭-seek_set--0

[2] 檔案當前位置-seek_cup--1

[3] 檔案末尾_seek_cur—2

2) 功能:把檔案定位指標設定到需要的地方。

在呼叫輸入/輸出函式時,對出現的錯誤有兩種檢測方法:一種是從該函式返回的乙個異常值得知(成功0,失敗eof(-1)),另一種是呼叫ferror函式,根據它的返回值判斷是否有讀/寫錯誤的出現。

1. 檔案的錯誤檢測函式ferror

1) 呼叫格式:

《整型變數》=ferror(《檔案指標》)

2) 功能:如果返回值為非0,則代表出錯了;0代表未出錯。

3) 需要注意的問題:

(1) ferror自動置初值0。

2. 檔案的錯誤處理函式clearerr

1) 呼叫格式:clearerr(《檔案指標》)。

功能:將ferror(《檔案指標》)的值重新置為0。

第九章(筆記)

轉移指令是可以修改ip,或同時修改cs和ip的指令 offset 是用於提取標號偏移位址的操作符 jmp在第2章裡說到時用於修改ip或同時修改cs和ip的轉移指令,這章裡單獨的jmp指令是乙個無條件的轉移指令 jmp short 標號 是實現段內短轉移 jmp near ptr 標號 是實現段內近轉...

程式設計珠璣第九章

1 記憶體訪問 連續記憶體訪問與跨頁面訪問記憶體的區別 注意在訪問記憶體的時候,要注意記憶體的連續性,如果訪問的記憶體不是連續的,那麼程式的執行速度也會受到極大的影響 例如訪問乙個二維陣列時,先訪問行,再訪問列,能夠減少頁面排程次數,同時cache命中率也相對高些。2 遞迴呼叫巨集時,需要小心,巨集...

c 基礎 (第九章)

結構體型別說明 struct 結構體識別符號 成員變數列表 如果沒有結構體識別符號,則稱為無名結構體型別 引用結構體變數成員 l 結構體變數名.成員名 l 結構體指標名 成員名 l 結構體指標名 成員名 共用體共用體所有變數共用一塊記憶體 定義格式如下 union 共用體識別符號 成員變數列表 列舉...