數據怎麼在磁盤上寫不是由文件打開方式決定的,而是由寫函數決定的。數據怎麼從磁盤上讀也不是由文件打開方式決定的,而是由讀函數決定的。
上面說的數據怎麼寫是指,一種類型的變量是怎麼存的?好比int 12,能夠直接存12的二進制碼(4個字節),也能夠存字符1,字符2.
數據怎麼讀的是指,我要讀一個int變量,是直接讀sizeof(int)個字節,仍是一個字符一個字符的讀,直到讀到的字符不是數字字符。函數
C裏面有兩組文件讀寫函數剛好支持上面兩種方式的讀寫:
1.二進制方式spa
fread(buffer,size,count,fp) fwrite(buffer,size,count,fp)。//用來讀寫一個數據塊。它對應的是第一種存儲方式。直接按類型的字節長度指定讀寫的字節數。
2.文本方式
fprintf函數和fscanf函數.它對應的是第二種讀寫方式。即以字符的方式讀寫。
fprintf函數、fscanf函數與printf函數、scanf函數的做用相仿,都是格式化讀寫函數。fprintf和fscanf函數的讀寫對象是磁盤文件,而printf和scanf函數的讀寫對象是終端。)
它們的通常調用格式爲:指針
fprintf(文件指針,格式字符串,輸出列表);//寫函數
fscanf (文件指針,格式字符串,輸入列表);//讀函數
#include <stdio.h> void main(){ FILE *fp; char s[]= "This is a string.",s1[30]; char c = '\n'; fp = fopen("file.txt","a"); fprintf(fp,"%s%c",s,c); fclose(fp); fp=fopen("file.txt","r"); fscanf(fp, "%[^\n]\n", s1); printf("%s\n",s1); fclose(fp); }
補充:文件結束符
文本文件適用:
EOF:經過#define EOF (-1) ,判斷文件指針指向的值是否爲EOF來判斷是否結束
二進制適用:
feof(FILE *p):避免了二進制中須要的文件中出現-1二被EOF誤判爲結束符,出現的一種操做,遇到結束返回1,不然返回0.code