天天看點

檔案操作函數fread/fwrite/fseek示範例程

fread函數。從一個檔案流中讀資料,最多讀取count個元素,每個元素size位元組,如果調用成功傳回實際讀取到的元素個數,如果不成功傳回 0。

size_t fread ( void *buffer, size_t size, size_t count, file *stream) ;

參數:

buffer 用于接收資料的記憶體位址,大小至少是size*count位元組.

size 單個元素的大小,機關是位元組

count 元素的個數,每個元素是size位元組.

stream 輸入流

傳回值:實際讀取的元素個數.如果傳回值與count不相同,則可能檔案結尾或發生錯誤.從ferror和feof擷取錯誤資訊或檢測是否到達檔案結尾

______________________________________________________________________________________

size_t fwrite(const void* buffer, size_t size, size_t count, file* stream);

注意:這個函數以二進制形式對檔案進行操作,不局限于文本檔案

(1)buffer:是一個指針,對fwrite來說,是要擷取資料的位址;

(2)size:要寫入内容的單位元組數;

(3)count:要進行寫入size位元組的資料項的個數;

(4)stream:目标檔案指針;

(5)傳回實際寫入的資料項個數count。

傳回值:傳回實際寫入的資料塊數目

說明:寫入到檔案的哪裡? 這個與檔案的打開模式有關,如果是w+,則是從file pointer指向的位址開始寫,替換掉之後的内容,檔案的長度可以不變,stream的位置移動count個數;如果是a+,則從檔案的末尾開始添加,檔案長度加大。

int fseek(file *stream, long offset, int fromwhere);

函數設定檔案指針stream的位置。如果執行成功,stream将指向以fromwhere(偏移起始位置:檔案頭0(seek_set),目前位置1(seek_cur),檔案尾2(seek_end))為基準,偏移offset(指針偏移量)個位元組的位置。如果執行失敗(比如offset超過檔案自身大小),則不改變stream指向的位置。