c檔案操作

2021-09-26 10:31:58 字數 4363 閱讀 9610

磁碟上的檔案是檔案。

但是在程式設計中,我們一般談的檔案有兩種:

程式檔案:

包括源程式檔案(字尾為.c),目標檔案(windows環境字尾為.obj),可執行程式(windows環境字尾

為.exe)。

資料檔案:

檔案的內容不一定是程式,而是程式執行時讀寫的資料,比如程式執行需要從中讀取資料的檔案,或者輸出

內容的檔案。

乙個檔案要有唯一的檔案標識,以方便使用者識別和引用。

檔名包含三個部分:檔案路徑 + 檔名主幹 + 檔案字尾

c:\yhs\test.c

根據資料的組織形式,資料檔案被稱為文字檔案或者二進位制檔案

資料在記憶體中以二進位制的形式儲存,如果不加轉換的輸出到外存,就是二進位制檔案

如果要求在外存上以ascii碼的形式儲存,則需要在儲存前轉換。以ascii字元的形式儲存的檔案就是文字檔案。

字元一律以ascii形式儲存,數值型資料既可以用ascii形式儲存,也可以使用二進位制形式儲存。

ansic 標準採用「緩衝檔案系統」處理的資料檔案的,所謂緩衝檔案系統是指系統自動地在記憶體中為程式中每乙個正在使用的檔案開闢一塊「檔案緩衝區」。從記憶體向磁碟輸出資料會先送到記憶體中的緩衝區,裝滿緩衝區後才一起送到磁碟上。如果從磁碟向計算機讀入資料,則從磁碟檔案中讀取資料輸入到記憶體緩衝區(充滿緩衝區),然後再從緩衝區逐個地將資料送到程式資料區(程式變數等)。緩衝區的大小根據c編譯系統決定。

檔案在讀寫之前應該先開啟檔案,在使用結束之後應該關閉檔案。

在編寫程式的時候,在開啟檔案的同時,都會返回乙個file*的指標變數指向該檔案,也相當於建立了指標和檔案的關係。

//ansic 規定使用fopen函式來開啟檔案,fclose來關閉檔案。

file *

fopen

(const

char

* filename,

const

char

* mode)

;int

fclose

(file *stream)

;

開啟方式:

檔案使用方式

含義如果指定檔案不存在

「r」(唯讀)

為了輸入資料,開啟乙個已經存在的文字檔案

出錯「w」(只寫)

為了輸出資料,開啟乙個文字檔案

建立乙個新的檔案

「a」(追加)

向文字檔案尾新增資料

出錯「rb」(唯讀)

為了輸入資料,開啟乙個二進位制檔案

出錯「wb」(只寫)

為了輸出資料,開啟乙個二進位制檔案

建立乙個新的檔案

「ab」(追加)

向乙個二進位制檔案尾新增資料

出錯「r+」(讀寫)

為了讀和寫,開啟乙個文字檔案

出錯「w+」(讀寫)

為了讀和寫,建立乙個新的檔案

建立乙個新的檔案

「a+」(讀寫)

開啟乙個檔案,在檔案尾進行讀寫

建立乙個新的檔案

「rb+」(讀寫)

為了讀和寫開啟乙個二進位制檔案

出錯「wb+」(讀寫)

為了讀和寫,新建乙個新的二進位制檔案

建立乙個新的檔案

「ab+」(讀寫)

開啟乙個二進位制檔案,在檔案尾進行讀和寫

建立乙個新的檔案

int

main

(void

)fwrite

(&i_num,

sizeof

(int),

1, fp)

;fclose

(fp)

;system

("pause");

return0;

}

功能

函式名適用於

字元輸入函式

fgetc

所有輸入流

字元輸出函式

fputc

所有輸出流

文字行輸入函式

fgets

所有輸入流

文字行輸出函式

fputs

所有輸出流

格式化輸入函式

fscanf

所有輸入流

格式化輸出函式

fprintf

所有輸出流

二進位制輸入

fread

檔案二進位制輸出

fwrite

檔案fseek根據檔案指標的位置和偏移量來定位檔案指標。

int

fseek

(file *stream,

long

int offset,

int origin)

;//這個函式是用來更改當前檔案的寫入位置的,說白了就是將我游標移到哪,只不過我們看不到。

//函式的第乙個引數是檔案指標,第二個為偏移量,第三個為檔案指標的位置。

第三個引數有系統定義的巨集

seek_cur

檔案指標的當前位置

seek_end

檔案的末尾

seek_set

檔案的開頭

ftell返回檔案指標相對於起始位置的偏移量

long

intftell

(file *stream)

;//這個函式可以配合著fseek來求檔案總共有所少個位元組,只要先呼叫fseek函式將檔案指標指向檔案的末尾,然後在呼叫ftell來求得值用乙個長整型來接收即可。

rewind讓檔案指標的位置回到檔案的起始位置

void rewind (file *stream)

;

被錯誤使用的feof

牢記:在檔案讀取的過程中,不能用feof函式的返回值直接判斷檔案是否結束,而是應用於當檔案讀取結束的時候,判斷是讀取失敗結束,還是遇到檔案尾結束。

2.二進位制檔案的讀取結束判斷,判斷返回值是否小於實際要讀的個數

例如:

正確的使用:

#include

#include

intmain

(void

)//fgetc 當讀取失敗的時候或者遇到檔案結束的時候,都會返回eof

while

((c =

fgetc

(fp))!=

eof)

// 標準c i/o讀取檔案迴圈

//判斷是什麼原因結束的if(

ferror

(fp)

)puts

("i/o error when reading");

elseif(

feof

(fp)

)puts

("end of file reached successfully");

fclose

(fp)

;}

二進位制檔案:

#include

#define size 5

intmain

(void);

double b[size]=;

size_t ret_code =0;

file *fp =

fopen

("test.bin"

,"wb");

// 必須用二進位制模式

fwrite

(a,sizeof

(*a)

, size, fp)

;// 寫 double 的陣列

fclose

(fp)

;

fp =

fopen

("test.bin"

,"rb");

ret_code =

fread

(b,sizeof

*b, size, fp)

;// 讀 double 的陣列

if(ret_code == size)

else

}fclose

(fp)

;}

C 檔案操作與C 的檔案操作

c filestream 檔案流 主要用於使用二進位制方式讀寫檔案資料,可讀取任何檔案 建立filestream物件 e 建立filestream物件 filemode 指定系統開啟檔案的方式filestream fileaccess 指定檔案的訪問方式 read唯讀,write只寫,readwri...

C 檔案操作

c 追加檔案 sw.writeline 追逐理想 sw.writeline kzlll sw.writeline net筆記 sw.flush sw.close c 拷貝檔案 string orignfile,newfile file.copy orignfile,newfile,true c 刪除...

C 檔案操作

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