C語言 檔案操作

2021-10-04 07:52:33 字數 4532 閱讀 9283

什麼是檔案?

使用檔案的好處?

檔案的分類

c語言中的檔案模型就是流式檔案。

c語言中的標準流

檔案指標

標準流預設含義

stdin

標準輸出

鍵盤stdout

標準輸出

終端顯示器螢幕

stderr

標準錯誤輸出

終端顯示器螢幕

scanf()

,getchar()

,gets

() 通過stdin獲得輸入

printf()

,putchar()

,puts

() 通過stdout進行輸出

c程式的源**

用位元組表示字元的字串行,儲存每個字元的ascii碼

可執行的c程式

file * fp;
檔案開啟後一定要檢查是否開啟成功

if

(fp ==

null

)

文字檔案r唯讀

必須是已存在的檔案w只寫

無**件是否存在,都新建乙個檔案a追加

向檔案尾新增資料,該檔案必須已經存在

r+讀寫

開啟乙個已存在的檔案,用於讀寫

w+讀寫

新建乙個檔案,可讀可寫

a+讀寫

在檔案尾追加資料,可讀可寫

w:若檔案不存在,新建檔案;

若檔案存在,將原檔案內容覆蓋

w+:若檔案不存在,新建檔案;

若檔案存在,清空檔案;

int

fclose

(file *fp)

;//若成功關閉,返回值為0

//關閉有錯,返回為非零值(驅動器無盤或者盤空間不夠,檔案關閉失敗會導致資料丟失、檔案破壞,甚至程式出現隨即錯誤

讀檔案方向:從外存到記憶體

int a;

char b;

fscanf

(fp,

"%d %s"

,&a,

&b);

//函式返回值為讀到的引數個數,可以作為條件來判斷輸入是否結束

fprintf

(fp,

"%d %c"

, a, b)

;

返回值:寫到檔案中的字元個數

寫錯誤,返回乙個負數

int

fputs

(int c, file *fp)

;//向fp指向的檔案輸出字元c

//寫入成功,返回c。寫入錯誤,返回eof

//從螢幕讀入,儲存到檔案中

int ch;

ch =

getchar()

;while

(ch !=

'\n'

)```c

intfgets

(file *fp)

;//從檔案讀入,輸出到螢幕上

int ch;

ch =

fgetc

(fp)

;while

(ch !=

eof)

下面先輸出字元,再判斷是否到達檔案尾的方式,會多輸出乙個檔案結束符

long pos;

while(!

feof

(fp)

)

開始時檔案位置指標指向第乙個字元,ftell返回值為0;

fgetc讀走乙個字元之後,fp自動指向下乙個字元;

讀完最後乙個字元之後,fp指向檔案末尾,即指向檔案結束符eof;

直到fgetc把eof也讀走之後,feof才能探測到檔案尾。

feof函式總結:

feof在讀完檔案所有內容之後,再執行一次讀檔案操作,將檔案結束符eof讀走,才能返回真(非0)值。

改進1:先判斷是否到達檔案尾,後輸出字元。不會輸出檔案結束符

pos =

ftell

(fp)

;c =

fgetc

(fp)

;while(!

feof

(fp)

)

最後一行若接收到檔案結束符eof,feof就會返回非零值,就會跳出迴圈

改進2:用eof判斷是否到達檔案尾

pos =

ftell

(fp)

;c =

fgetc

(fp)

;while

(c !=

eof)

//簡化

pos =

ftell

(fp)

;while

((c =

fgetc

(fp))!=

eof)

用eof判斷存在問題:讀到檔案尾或者讀取錯誤時,fgetc()都返回eof,無法區分

用ferror()判斷是否讀取錯誤,出錯返回非0值

if

(ferror

(fp)

puts(),將字串寫入標準輸出流,並且在其後新增乙個換行符;

fputs(),不會自動新增換行符

gets(char *s),從鍵盤讀乙個字元,讀到換行符停止

【get會將字串儲存到s指向的緩衝區,然後返回字串的首位址,但是不考慮緩衝區大小,容易造成緩衝區溢位,給緩衝區溢位攻擊造成可乘之機】

fgets(char *s, int n, file *fp),從檔案讀取字串,最多讀n-1個字元。當遇到回車換行符,檔案末尾,或者讀滿n-1個字元時,函式返回字串的首位址

【引數n限制了字串的長度,解決了緩衝區溢位問題。用fgets(buf, sizeof(buf),stdin)代替 gets(buf)更安全】

char *gets(char *s);

char *fgets(char *s, int n, file *fp);

【相同點】都會在字串末尾新增』\0』;

讀取失敗或者讀到檔案尾都返回null;

讀取失敗用ferror確定,讀到檔案尾用feof確定。

【不同點】對換行符的處理不同

gets:不保留換行符\n,替換為\0

fgets:保留並儲存\n,在換行符後面新增\0

用fputs代替fputc

從鍵盤輸入,輸出到螢幕

char str[80]

;gets

(str)

;//fgets(str, sizeof(str), stdin); 規定輸入字串的長度

fputs

(str, fp)

;

從檔案讀出,輸出到螢幕

char str[80]

;fgets

(str,

sizeof

(str)

, fp)

;puts

(str)

;

從fp所指檔案讀資料,並將資料存到a所指向的位址

num =

fread

(a,sizeof

(char

), n ,fp)

;//n個塊,每個塊佔乙個位元組

返回值為實際寫入的資料塊個數,應該等於n,除非出現錯誤

num =

fwrite

(a,sizeof

(char

), n ,fp)

;

void rewind(file fp),使檔案位置指標重修指向檔案開始位置

long ftell(eilefp),返回當前檔案位置指標相對於檔案起始位置的位元組偏移量

int fseek(file *fp,long offset ,int fromwhere),改變檔案指標位置

offset:指標偏移量(位元組數)

fromwhere:起始位置

【seek_set或0】:檔案開始

【seek_cur或1】:當前位置

【seek_end或2】:檔案末尾

向磁碟輸出資料:資料->緩衝區,裝滿緩衝區後->磁碟檔案

從磁碟讀入資料:一次性從磁碟檔案將一批資料輸入到緩衝區,然後再從緩衝區逐個讀入資料到記憶體中某個變數

c語言檔案操作

rt null ch fgetc fp while ch eof fclose fp 本 例程式的功能是從檔案中逐個讀取字元,在螢幕上顯示。程式定義了檔案指標fp,以讀文字檔案方式開啟檔案 d jrzh example ex1 1.c 並使fp指向該檔案。如開啟檔案出錯,給出提示並退出程式。程式第1...

C語言檔案操作

1.首先要理解幾個概念 檔案 按一定規則儲存在磁碟上的資料集合。檔名 能唯一標識某個磁碟檔案的字串。形式 碟符 路徑 檔名.副檔名 二進位制檔案 資料以二進位制形式在儲存在磁碟上。裝置檔案 輸入 輸出裝置 標準輸入檔案 鍵盤 標準輸出檔案 標準錯誤輸出檔案 顯示器 檔案型指標 c語言是通過名為fil...

C語言檔案操作

1,兩種檔案訪問方式 輸入,輸出方式 順序訪問 直接訪問 2,資料的兩種存放形式 文字檔案 二進位制檔案 3.檔案指標 定義檔案型別指標變數的一般形式 file 指標變數名 例如 file fp1,fp2 4.開啟檔案 在使用檔案之前,需開啟檔案.在c裡使用fopen函式開啟檔案.格式為 fopen...