C語言函式fread() , fwrite() ,fseek()用法分析
網上已經有不少關於c語言函式fread() 和fwrite() 用法分析的文章,在此將這兩個函式的用法寫下來,是為了鞏固所學,加深印象,也為了日後方便查詢複習比較,如果能幫助到某些朋友,則是意外的驚喜。
fwrite()函式的意義是將某二進位制資料寫到指定的 檔案流。函式的原型為:
size_t fwrite (const void *buffer, size_t size, size_t num, FILE *stream)
四個函式引數的意義分別為:1、const void *buffer 為指向二進位制資料來源的指標;2、size_t size 為每個資料單元所佔的位元組數;
3、size_t num 為需要讀取的資料單元的個數; 4、FILE *stream 為目的檔案指標。
返回值為實際寫入目的檔案的資料單元個數。 範例如下:
#include <stdio.h> #include <stdlib.h> void main() { FILE *lb; char a[] = "Time is fast"; if (NULL == (lb = fopen("test.txt", "w+"))) //!<開啟檔案 { printf("Fail to open the file"); exit(EXIT_FAILURE); } fwrite( a, sizeof(a), 1, lb); //!<把a中資料寫入檔案lb fclose(lb); return ; }
函式fseek()的原型是:int fseek(FILE *stream, long offset, int fromwhere)
後兩個引數的意義分別為:
1、long offset 為偏移量,正數表示正向偏移(向尾部偏移),負數表示負向偏移(向首部偏移);
2、int fromwhere 為偏移的起始點,對於fromwhere ,函式fseek定義了三個位置,對應如下:
SEEK_SET(對應 0):檔案開頭;
SEEK_CUR(對應 1):檔案指標所指當前位置;
SEEK_END(對應2):檔案結尾;
FILE *fp;
fseek(fp,
0, SEEK_SET); //!< 指標定位檔案首部
fseek(fp, 100, SEEK_CUR); //!< 指標定位離當前位置100個位元組的地方
fseek(fp,
-100, SEEK_END); //!< 指標定位離檔案末尾100個位元組(檔案首部方向)的地方
3、返回值: 如果函式執行成功,FILE *stream將指向以fromwhere 為起始點,偏移offset個位元組的位置,返回返回0。若函式執行失敗(比如offset超過了檔案自身的大小),則不改變stream指向的位置,返回非0值。
若檔案偏移超出了檔案末尾位置,還是返回0,;若往回偏移超出了檔案首部,返回-1,。
函式fread() 的原型是:size_t fread( void *buffer, size_t size, size_t num,FILE *stream)
四個引數的意義可參考fwrite()。稍微不同之處是:fwrite()是將資料從*buffer 寫到 FILE *stream;而fread()是將資料從
FILE *stream寫到*buffer,是一個相反的過程。範例如下:
#include <stdio.h>
#include <stdlib.h>
void main()
{
FILE *lb;
char a[] = "Time is fast";
char b[20];
if (NULL == (lb = fopen("test.txt", "w+"))) //!<開啟檔案
{
printf("Fail to open the file");
exit(EXIT_FAILURE);
}
fwrite( a, sizeof(a), 1, lb); //!<把a中資料寫入檔案lb
fseek(lb, 0, SEEK_SET); //!<把指標lb定位到檔案初始位置
fread(b, sizeof(a), 1, lb); //!<從lb指向的地址開始將一定長度資料寫到b
printf("a[] = %s\n", a);
printf("b[] = %s\n", b);
fclose(lb);
return ;
}