1.什麼是檔案
磁碟上的檔案是檔案。
但是在程式設計中,我們一般談的檔案有兩種:程式檔案、資料檔案
(1)程式檔案
包括源程式檔案(字尾為.c),目標檔案(windows環境字尾為.obj),可執行程式(windows環境字尾
為.exe)。
( 2 )資料檔案
檔案的內容不一定是程式,而是程式執行時讀寫的資料,比如程式執行需要從中讀取資料的檔案,或者輸出內
容的檔案。
2.操作函式
(1)fopen開啟函式和fclose關閉函式
file *fopen(const char *filename, const char *mode);
其功能是使用給定的模式 mode 開啟 filename 所指向的檔案。檔案順利開啟後,指向該流的檔案指標就會被返回。如果檔案開啟失敗則返回 null,並把錯誤**存在 error 中。該函式位於c 標準庫中。
int fclose( file *fp );
fclose是乙個函式名,功能是關閉乙個流。注意:使用fclose()函式就可以把緩衝區內最後剩餘的資料輸出到核心緩衝區,並釋放檔案指標和有關的緩衝區。
常用開啟方式如下:「r」(唯讀) 為了輸入資料,開啟乙個已經存在的文字檔案
「w」(只寫) 為了輸出資料,開啟乙個文字檔案
「a」(追加) 向文字檔案尾新增資料
#include int main ()
return 0;
}
(2)fseek函式
檔案的隨機讀寫int fseek ( file * stream, long int offset, int origin );
如果執行成功,stream將指向以fromwhere為基準,偏移offset(指標偏移量)個位元組的位置,函式返回0。如果執行失敗(比如offset取值大於等於210241024*1024,即long的正數範圍2g),則不改變stream指向的位置,函式返回乙個非0值。
fseek函式和lseek函式類似,但lseek返回的是乙個off_t數值,而fseek返回的是乙個整型。
#include int main ()
(3)ftell函式
返回檔案指標相對於起始位置的偏移量long int ftell ( file * stream );
函式 ftell 用於得到檔案位置指標當前位置相對於檔案首的偏移位元組數。在隨機方式訪問檔案時,由於檔案位置頻繁的前後移動,程式不容易確定檔案的當前位置。
該函式對大於231-1檔案,即:2.1g以上的檔案操作時可能出錯。
#include int main ()
return 0;
}
(4)rewind函式
讓檔案指標的位置回到檔案的起始位置void rewind ( file * stream );
c 程式中的庫函式,功能是將檔案內部的指標重新指向乙個流的開頭
#include int main ()
(5)檔案結束判定
被錯誤使用的feof
牢記:在檔案讀取過程中,不能用feof函式的返回值直接用來判斷檔案的是否結束。
而是應用於當檔案讀取結束的時候,判斷是讀取失敗結束,還是遇到檔案尾結束。
文字檔案讀取是否結束,判斷返回值是否為eof (fgetc),或者null(fgets)
例如:fgetc判斷是否為eof.
fgets判斷返回值是否為null.
#include #include int main(void)
//fgetc 當讀取失敗的時候或者遇到檔案結束的時候,都會返回eof
while ((c = fgetc(fp)) != eof) // 標準c i/o讀取檔案迴圈
//判斷是什麼原因結束的
if (ferror(fp))
puts("i/o error when reading");```
else if (feof(fp))
puts("end of file reached successfully");
fclose(fp);
}
檔案操作函式
1,feof 檢查檔案流是否讀到了檔案尾 相關函式 fopen,fgetc,fgets,fread 表頭檔案 include 定義函式 int feof file stream 函式說明 feof 用來偵測是否讀取到了檔案尾,尾數stream為fopen 所返回之檔案指標。如果已到檔案尾則返回非零值...
檔案操作函式
1 檔案測試函式 2 檔案操作 新建檔案 fopen filename,w 以 寫 的方式開啟乙個不存在的檔案,就會新建該檔案 檔案刪除 unlink 檔案複製 copy filename,aaa bb.txt 盡量使用 和相對路徑,因為linux只認 也沒有磁碟分割槽,而windows 和 都認 ...
檔案操作函式
fopenfclose函式 系統需要在記憶體中為每個讀寫的檔案開闢一段快取,快取中儲存檔案資訊的是file結構體,開啟檔案時就會獲得指向file的指標。為什麼要用快取呢,因為硬碟讀取時很慢的,機械硬碟的讀寫時間都是毫秒級,而記憶體讀寫是納秒級的,差了一百萬倍。函式原型為file fopen cons...