檔案

JenckMin發表於2024-03-20

檔案型別指標

​ 檔案指標是一個指向結構體型別的指標,定義格式為:FILE *指標變數名。在使用檔案時,都需要先定義檔案指標。

文字檔案與二進位制檔案

文字形式存放的是字元的ASCII碼,二進位制形式存放的是資料的二進位制。例如“100”如果是文字形式就是儲存’1’、 ’0’、 ’0’三個字元的ASCII碼(00110001 00110000 00110000),如果是二進位制形式就把100轉化成二進位制(01100100)。

開啟檔案

​ 檔案的開啟形式如下:FILE*fp;fp=fopen("c:\\lab.c","rb");。fopen函式的前面一部分為檔名,後面一部分為檔案的使用方式。其中r代表讀,w代表寫,a代表新增,b代表二進位制位的。

檔案函式

  1. 判斷檔案結束feof函式,呼叫形式為:feof(FILE*fp);//檔案指標,如果檔案結束,則函式返回1,否則返回0
  2. fseek用來設定檔案的位置,接著的讀或寫操作將從此位置開始。函式的呼叫形式如下:fseek(檔案指標,位移量,移動起始點);
    例如:FILE*fp=fopen("C:\\test.c","rb");fseek(fp,12,SEEK_SET);//表示將檔案fp的位置移動島檔案起始位置後面的第12個位元組的位置上或者fseek(fp,12,0);
    fseek(fp,-12,SEEK_END);//表示將檔案fp的位置移動到檔案末尾位置前面的第12個位元組的位置上或者fseek(fp,12,2);
    如果是fseek(fp,12,SEEK_CUR); //表示將檔案fp的位置從當前位置移動後面的第12個位元組的位置上或者fseek(fp,12,1);
  3. ftell用來獲得檔案當前的位置,函式給出當前位置相對於檔案開頭的位元組數。函式呼叫形式如下:
    ftell(FILE *fp) //給出當前聞之相對於開頭的位元組數 ,出錯時,返回-1L
  4. 檔案位置移到開頭rewind函式功能等價於 fseek(fp,0,SEEK_SET)
  5. 檔案字元輸入輸出ch=fgetc(FILE *fp)函式用於從fp指定的檔案中讀入一個字元並把它作為函式值返回
  6. fputc(char ch,FILE *fp),將字元ch寫到檔案指標fp所指的檔案中去,輸出成功,則返回輸出的字元,失敗,則返回一個EOF值
  7. 檔案輸入輸出fscanf函式和fprintf函式,一般形式fscanf(檔案指標,格式控制字串,輸入項表或輸入項表)
  8. 檔案字串輸入輸出fgets函式(fgets(str,n,fp),功能是從fp所指檔案中讀入n-1個字元放入str為起始地址的空間內)和fputs函式( fputs(str,fp) )
  9. 讀寫二進位制檔案fread函式和fwrite函式。

例題:

​ 給定程式中,函式fun的功能是將形參給定的字串、整數、浮點數寫到文字檔案中,再用字元方式從此文字檔案中逐個讀入並顯示在終端螢幕上。 請在程式的下劃線處填入正確的內容並把下劃線刪除, 使程式得出正確的結果。
注意:源程式存放在資料夾下的BLANK1.C中。
不得增行或刪行,也不得更改程式的結構!
給定源程式:

#include <stdio.h>//這是C語言的預處理指令,用於包含標準輸入輸出庫。
void fun(char *s, int a, double f)//定義了一個名為fun的函式,它接受一個字元指標、一個整數和一個浮點數作為引數。
{
    FILE *fp;
    char ch;
    //在函式內部定義了一個檔案指標fp和一個字元變數ch。
    fp = fopen("file1.txt", "w");//開啟名為"file1.txt"的檔案以寫入資料。如果檔案不存在,將建立一個新檔案。
    fprintf(fp, "%s %d %f\n", s, a, f);//將引數s、a和f的值寫入檔案。
    fclose(fp);//關閉檔案。
    fp = fopen("file1.txt", "r");//以讀取模式重新開啟檔案。
    printf("\nThe result :\n\n");//在控制檯列印提示資訊。
    ch = fgetc(fp);//從檔案中讀取一個字元並儲存在ch中。
    while (!feof(fp))//當未到達檔案末尾時,執行迴圈體。
    {
        putchar(ch);//列印字元ch。
        ch = fgetc(fp);//再次從檔案中讀取一個字元。

    }
    fclose(fp);//關閉檔案。
}
int main()//定義主函式。
{
    //在主函式中定義並初始化一個字元陣列、一個整數和一個浮點數。
    char a[10] = "Hello!";
    int b = 12345;
    double c = 98.76;
    fun(a, b, c);//呼叫fun函式,將字元陣列、整數和浮點數作為引數傳入。
}

相關文章