摘要:四文件緩沖區(qū)標準采用緩沖文件系統(tǒng)處理的數(shù)據(jù)文件的緩沖文件系統(tǒng)是指系統(tǒng)自動地在內存中為程序中為每一個正在使用的文件,開辟一塊文件緩沖區(qū)。正因為有緩沖區(qū)的存在,語言在操作文件的時候,需要做刷新緩沖區(qū)或者在文件操作結束的時候關閉文件
老規(guī)矩筆記自取~:文件操作進階筆記
??歡迎喜歡學習C/C++的朋友互關一起努力??!??
根據(jù)文件指針的位置和偏移量來定位文件指針
改變原文件指針指向的位置
int fseek( FILE *stream, long offset, int origin );
參數(shù):文件地址,偏移量,起始位置
這里的起始位置
分為
SEEK_CUR 當前位置
Current position of file pointer
SEEK_END 文件字符的末位(最后一個字符的下個位置)
End of file
SEEK_SET 文件起始位置(第一個字符的起始位)
Beginning of file
偏移量右正左負
返回值:成功返回,0
用一段代碼感受:
#define _CRT_SECURE_NO_WARNINGS#include #include int main(){ //FILE* fp = fopen("C://Users//yujing wang//Desktop//test.txt", "w");//寫入 FILE* fp = fopen("C://Users//yujing wang//Desktop//test.txt", "r");//讀取 if (fp == NULL) { perror("fopen"); return -1; } //fputs("abcde", fp);//寫入abc fseek(fp, 1, SEEK_SET);//第二個字符 printf("%c", fgetc(fp)); fseek(fp, 0, SEEK_CUR);//與上面一樣 printf("%c", fgetc(fp)); fseek(fp, -1, SEEK_END);//最后一個字符 printf("%c", fgetc(fp)); fclose(fp); fp = NULL; return 0;}
運行結果和想象的一樣
返回文件指針相對于起始位置的偏移量
方便我們知道現(xiàn)在文件指針指向哪個位置
long int ftell ( FILE * stream );
參數(shù):文件地址
返回值:偏移量
還是一段代碼搞起~
#include #include int main(){ FILE* fp = fopen("C://Users//yujing wang//Desktop//test.txt", "r");//讀取 if (fp == NULL) { perror("fopen"); return -1; } fseek(fp, 1, SEEK_SET);//指向第二個字符 printf("%ld", ftell(fp)); fclose(fp); fp = NULL; return 0;}
結果符合我們的猜想
讓文件指針的位置回到文件的起始位置
void rewind ( FILE * stream );
參數(shù):文件地址
返回值:NULL
把剛才的代碼再加一行
int main(){ FILE* fp = fopen("C://Users//yujing wang//Desktop//test.txt", "r");//讀取 if (fp == NULL) { perror("fopen"); return -1; } fseek(fp, 1, SEEK_SET);//指向第二個字符 rewind(fp); printf("%ld", ftell(fp)); fclose(fp); fp = NULL; return 0;}
運行結果
偏移量變?yōu)?了
?
二進制文件
:數(shù)據(jù)在內存中以二進制的形式存儲,如果不加轉換的輸出到外存?
文本文件
:以ASCII字符的形式存儲的文件,如果要求在外存上以ASCII碼的形式存儲,則需要在存儲前轉換
一個數(shù)據(jù)在內存中是怎么存儲的呢?
在文件讀取過程中,
不能
用feof函數(shù)的返回值直接用來判斷文件的是否結束
該函數(shù)應用于當文件讀取結束的時候,判斷是讀取失敗結束,還是遇到文件尾結束
?feof的用途:是文件讀取結束了,判斷是不是
遇到文件末尾而結束
?ferror的用途:文件讀取結束了,判斷是不是遇到
錯誤后讀取結束
讀取結束
返回EOF
讀取結束
返回NULL
?ANSIC標準采用“緩沖文件系統(tǒng)”處理的數(shù)據(jù)文件的
?緩沖文件系統(tǒng)是指系統(tǒng)自動地在內存中為程序中為每一個正在使用的文件,開辟一塊“文件緩沖區(qū)”
。從內存向磁盤輸出數(shù)據(jù)會先送到內存中的緩沖區(qū)
,裝滿緩沖區(qū)
后才一起送到磁盤上。如果從磁盤向計算機讀入數(shù)據(jù),則從磁盤文件中讀取數(shù)據(jù)輸入到內存緩沖區(qū)(充滿緩沖區(qū)),然后再從緩沖區(qū)逐個地將數(shù)據(jù)送到程序數(shù)據(jù)區(qū)(程序變量等)。
如圖所示
其實,在之前的學習過程中,就已經接觸了內存緩存區(qū)
int main(){ int a = 0; while ((a = getchar()) != EOF) { if (("a" <= a && a <= "z") || ("A" <= a && a <= "Z")) { printf("YES/n"); } else { printf("NO/n"); } getchar();//將每次的"/n"除去 } return 0;}
這里的getchar就是將
緩沖區(qū)未輸出
的數(shù),取出來
緩沖區(qū)的大小根據(jù)C編譯系統(tǒng)決定的。
?正因為有緩沖區(qū)的存在,C語言在操作文件的時候,需要做刷新緩沖區(qū)(fflush)
或者在文件操作結束的時候關閉文件(fclose)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/122188.html
摘要:后端好書閱讀與推薦系列文章后端好書閱讀與推薦后端好書閱讀與推薦續(xù)后端好書閱讀與推薦續(xù)二后端好書閱讀與推薦續(xù)三這里依然記錄一下每本書的亮點與自己讀書心得和體會,分享并求拍磚。然后又請求封鎖,當釋放了上的封鎖之后,系統(tǒng)又批準了的請求一直等待。 后端好書閱讀與推薦系列文章:后端好書閱讀與推薦后端好書閱讀與推薦(續(xù))后端好書閱讀與推薦(續(xù)二)后端好書閱讀與推薦(續(xù)三) 這里依然記錄一下每本書的...
摘要:后端好書閱讀與推薦系列文章后端好書閱讀與推薦后端好書閱讀與推薦續(xù)后端好書閱讀與推薦續(xù)二后端好書閱讀與推薦續(xù)三這里依然記錄一下每本書的亮點與自己讀書心得和體會,分享并求拍磚。然后又請求封鎖,當釋放了上的封鎖之后,系統(tǒng)又批準了的請求一直等待。 后端好書閱讀與推薦系列文章:后端好書閱讀與推薦后端好書閱讀與推薦(續(xù))后端好書閱讀與推薦(續(xù)二)后端好書閱讀與推薦(續(xù)三) 這里依然記錄一下每本書的...
摘要:后端好書閱讀與推薦系列文章后端好書閱讀與推薦后端好書閱讀與推薦續(xù)后端好書閱讀與推薦續(xù)二后端好書閱讀與推薦續(xù)三這里依然記錄一下每本書的亮點與自己讀書心得和體會,分享并求拍磚。然后又請求封鎖,當釋放了上的封鎖之后,系統(tǒng)又批準了的請求一直等待。 后端好書閱讀與推薦系列文章:后端好書閱讀與推薦后端好書閱讀與推薦(續(xù))后端好書閱讀與推薦(續(xù)二)后端好書閱讀與推薦(續(xù)三) 這里依然記錄一下每本書的...
閱讀 1063·2021-11-24 09:39
閱讀 3602·2021-11-22 13:54
閱讀 2558·2021-10-11 10:59
閱讀 796·2021-09-02 15:40
閱讀 1035·2019-08-30 15:55
閱讀 1053·2019-08-30 13:57
閱讀 2314·2019-08-30 13:17
閱讀 3034·2019-08-29 18:32