說明:首先以讀寫方式開啟(r+ w+ a+都可以,不過要注意讀寫位置指標分別指向檔案頭、檔案頭、檔案尾),一次讀乙個字元(此時讀寫位置指標指向此位元組後面,判斷後,若要轉換,移動讀寫位置指標fseek(fp,-1l,seek_cur),再寫入,由於在c中規定:
以上述三種方式開啟檔案,既可讀又可寫,但:在沒有插入fseek()或rewind()的情況下,寫不可以直接跟在讀後面,在沒有插入fseek()rewind()或碰到檔案結束的情況下,讀不可以直接跟在寫後面。所以要轉換讀寫狀態。
因為在c語言中對流式檔案進行操作時,開啟檔案後,有乙個讀寫位置指標,記錄的是讀寫時在檔案中的位置,其初始狀態與開啟方式有關。r、r+方式開啟時,它指向檔案頭;w、w+方式開啟時,也指向檔案頭(注意:雖然讀寫位置指標指向相同,但這兩種方式對檔案是否已存在處理不同,r、r+開啟時,只有當檔案已存在才能正確開啟,若檔案不存在,出錯,而w、w+方式開啟時,檔案不存在,則生成該檔案,若檔案存在,刪除後再重新生成),a,a+方式開啟時,讀寫位置指標指向檔案尾,若檔案不存在,看具體的系統,在turbo c 中與w、w+方式相同,即生成新檔案。
r 唯讀,w 只寫 a 追加,也是只寫
r+ w+ a+既可讀又可寫,但:
在沒有插入fseek()或rewind()的情況下,寫不可以直接跟在讀後面,在沒有插入fseek()rewind()或碰到檔案結束的情況下,讀不可以直接跟在寫後面。所以,想同時對檔案進行讀寫,必須在讀寫狀態轉換時呼叫fseek()或rewind()函式。
rewind(file *fp)是將fp所指向檔案中的讀寫位置指標移動到檔案頭
fseek(file *fp, long offset, int i)是在檔案中隨意移動讀寫位置指標
int i是移動基準點, 在stdio.h中定義了三個巨集
seek_set 檔案頭
seek_cur 當前位置
seek_end 檔案尾
long offset 相對於基準點的位移量,單位為位元組數,
當》0 向前,即從基準點向檔案尾方向移動offset個位元組數,
=0, 其實就是移動到基準點
<0 向後,即從基準點向檔案頭方向移動offset個位元組數
在使用函式進行讀寫時,位置指標指向被讀寫資料後的位元組,你讀乙個位元組,判斷後,要轉換則移動-1l,再寫乙個轉換後的字元到檔案中去就行了
fseek(fp,-1l,seek_cur);/*向前移動1個位元組,同時也就完成的讀寫狀態的變換*/
fputc(ch,fp);/*寫檔案,乙個字元*/
fseek(fp,0l,seek_cur);/*寫完後,要改為讀操作了,轉換讀寫狀態,並不移動*/
檔案的讀寫操作
1.讀寫字元函式fgetc fputc int fgetc file stream 將流指標指向的檔案中的乙個字元輸出。若檔案指標指到檔案尾,會遇到檔案結束標誌eof 1 我們可以通過檢查該函式的返回值是否是 1來判斷是否已讀到檔案尾。int fputc int ch,file stream 將字元...
檔案的讀寫操作
1.read 會一次性讀取檔案的全部內容。2.readline 每次讀取一行,並且自帶換行功能,每一行末尾會讀到 n。3.readlines 一次性以行的形式讀取檔案的所有內容並返回乙個list,需要去遍歷讀出來。4.file控制代碼是乙個可迭代的物件因此,可以迴圈讀取檔案中的內容,每次讀一行。a ...
檔案的讀寫操作
檔案的讀操作 open 第乙個引數必須有,表示檔案的絕對路徑或者相對路徑 第二個引數mode,表示檔案開啟的方式 r 讀 w 寫 a 追加 r r w 可讀可寫,檔案若不存在就報錯 ioerror w w r 可讀可寫,檔案若不存在就建立 a a r 可追加可寫,檔案若不存在就建立 對應的,如果是二...