C語言--檔案學習總結
阿新 • • 發佈:2018-11-11
檔案輸入和輸出
1.基礎概念
- 輸入和輸出都是緩衝的
- FILE 是一種結構,是專門用來指向檔案的指標
- 檔案只有在開啟後,才能進行讀寫
檔案 | 檔案指標 | 常用裝置 | 特殊方法 |
---|---|---|---|
標準輸入 | stdin | 鍵盤 | 具有緩衝,整行輸入 |
標準輸出 | stdout | 螢幕 | 具有緩衝,整行輸出 |
標準錯誤 | stderr | 螢幕 | 即時輸出,無需等待 |
開啟的檔案 | fp(自定義) | 檔案 | 無 |
2.fopen()
FILE *fp;//先定義一個檔案指標
fp=fopen("檔名","開啟方式");
- fopen開啟的是同路徑下的檔案,如果檔案開啟失敗返回NULL
- 使用fopen()需要驗證是否成功開啟檔案,即返回值是否為NULL
- fopen()的兩個引數,都要加”“
開啟方式 | 含義 |
---|---|
r | 只讀模式,只能檢視資訊 |
w | 寫入模式,清空(新建)原檔案,重新輸入 |
a | 續寫模式,在(新建)原檔案後,新增輸入 |
r+ | 讀寫模式,覆蓋檔案前部內容 |
w+ | 讀寫模式,清空後輸入 |
a+ | 讀寫模式,在檔案後續寫 |
3.fclose()
fclose(fp);
- 關閉引數是檔案指標,定義的檔案指標,不是檔名稱
- 使用fclose()需要驗證是否成功開啟檔案,即返回值是否為NULL
4.getc()和putc()
ch = getc(fp);
putc(ch,FILE型別);
5.fprintf()和fscanf()
- fprintf(FILE型別,”%d”,num);
- fscanf(FILEl型別,”%d”,num);
6.fgets()和fputs()
- fgets(字串地址,偏移量,FILE型別);
- fputs(字串地址,FILEl型別);
7.fseek()和ftell()
fseek()表示調整檔案當前的位置
rewind()表示返回檔案的開頭位置
ftell()表示當前位置到檔案開頭的距離
- fseek(檔案指標,長度L,起點模式);
- ftell(檔案指標);
- ftell()可以作為fseek()的第二個引數
- rewind(fp) == fseek ( fp,0L,SEEK_SET )
模式 | 偏移量的起始點 |
---|---|
SEEK_SET | 檔案開始處 |
SEEK_CUR | 當期位置 |
SEEK_END | 檔案結尾 |
8.檔案的二進位制與文字模式
二進位制檔案就是把記憶體中的資料按記憶體中儲存的形式輸出到磁碟中存放,即存放的是資料的原形式。
文字檔案是把資料的終端形式的二進位制資料輸出到磁碟上存放,即存放的是資料的終端形式
在實際儲存中最好是將資料分成字元資料和非字元資料兩類:
- 如果儲存的是字元資料,無論採用文字檔案還是二進位制檔案都是沒有任何區別的,所以討論使用文字檔案還是二進位制檔案是沒有意義的。
- 如果儲存的是非字元資料,又要看我們使用的情況來決定:
- a:如果是需要頻繁的儲存和訪問資料,那麼應該採取二進位制檔案進行存放,這樣可以節省儲存空間和轉換時間。
- B:如果需要頻繁的向終端顯示資料或從終端讀入資料,那麼應該採用文字檔案進行存放,這樣可以節省轉換時間。
文字模式儲存,二進位制儲存
9.fweite()和fread()
fwrite(name,sizeof(int),5,fp);
fread(name,sizeof(int),5,fp);
//函式的引數為(儲存的內容,位元組數,個數,位置)
可以儲存一個複雜的資料結構,而不需要向fscanf()一樣,寫多個轉義型別
返回值為成功讀取相關型別的個數
讀取時相關資訊,需要先分配記憶體
連結串列的儲存時,二次讀取時,地址資訊會改變,需要新建一個連結串列,而不能使用儲存的地址。
以檔案是否為控制eof結束讀取