首頁  >  文章  >  後端開發  >  c語言檔案讀寫操作有哪些?

c語言檔案讀寫操作有哪些?

coldplay.xixi
coldplay.xixi原創
2020-07-27 13:44:174093瀏覽

c語言檔案讀寫操作有:1、讀寫檔案中字元的函數,程式碼為【int fgetc(FILE *stream)】;2、讀寫檔案中字串的函數,程式碼為【 int fputs(char *string,FILE *stream)】。

c語言檔案讀寫操作有哪些?

c語言檔案讀寫操作有:

1.檔案的開啟函數fopen()

檔案的開啟操作表示將給使用者指定的檔案在記憶體中分配一個FILE結構區,並將該結構的指標傳回給使用者程序,以後使用者程式就可用此FILE指標來實現對指定檔案的存取操作了。當使用開啟函數時,必須給出檔案名稱、檔案操作方式(讀、寫或讀寫),

如果該檔案名稱不存在,就意味著建立(只對寫入檔案而言,對讀取檔案則出錯),並將檔案指標指向檔案開頭。若已有一個同名文件存在,則刪除該文件,若無同名文件,則建立該文件,並將文件指針指向文件開頭。

fopen(char *filename,char *type);

其中*filename是要開啟檔案的檔案名稱指針,一般用雙引號括起來的檔案名稱表示,也可使用雙反斜線隔開的路徑名稱。而*type參數表示了對開啟檔案的操作方式。其可採用的操作方式如下:

  •   意義"r" 打開,唯讀;

  •  "w" 打開,檔案指標指向頭,只寫;

  •  "a" 打開,指向檔案尾,在已存在檔案中追加;

  • "rb" 開啟一個二進位文件,唯讀;

  •  "wb" 開啟一個二進位文件,只寫;

  •  "ab" 開啟一個二進位文件,進行追加;

  • "r " 以讀取/寫入方式開啟一個已存在的檔案; 

  • "w " 以讀取/寫入方式建立一個新的文字檔案;

  • "a " 以讀取/寫入方式開啟一個檔案檔案進行追加;

  • "rb " 以讀取/寫入方式開啟一個二進位檔案;

  •  "wb " 以讀取/寫入方式建立一個新的二進位檔案;

  • "ab " 以讀/寫方式開啟一個二進位檔案進行追加;

當用fopen()成功的開啟一個檔案時,該函數會傳回一個FILE指針,如果檔案開啟失敗,將會傳回一個NULL指標。

2.關閉檔案函數fclose() 

檔案操作完成後,必須要用fclose()函數關閉,這是因為開啟的檔案寫入時,若檔案緩衝區的空間未被寫入的內容填滿,這些內容不會寫入到開啟的檔案中去而遺失。只有在對開啟的文件進行關閉操作時,停留在文件緩衝區的內容才能寫到該文件中去,從而使文件完整。

再者一旦關閉了文件,該文件對應的FILE結構將被釋放,從而使關閉的文件得到保護,因為這時對該文件的訪問操作將不會進行。文件的關閉也意味著釋放了該文件的緩衝區。

int fclose(FILE *stream);

它表示該函數將關閉FILE指向應的文件,並傳回一個整數值。若成功地關閉了文件,則傳回一個0值,否則傳回一個非0值。

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main()
{
    FILE *fp;   //  头文件#include <stdio.h>
    if((fp=fopen("123.txt","w"))==NULL)
    {
        printf("file cannot open \n");
        //exit(0);  头文件#include <stdlib.h>
        //exit结束程序,一般0为正常推出,其它数字为异常,其对应的错误可以自己指定。
    }
    else
        printf("file opened for writing \n");
    if(fclose(fp)!=0)
        printf("file cannot be closed \n");
    else
        printf("file is now closed \n");
    return 0;
}

3.檔案的讀寫

(1).讀寫檔案中字元的函數(一次只讀寫檔案中的一個字元):

int fgetc(FILE *stream);
int getchar(void);
int fputc(int ch,FILE *stream);
int putchar(int ch);
int getc(FILE *stream);
int putc(int ch,FILE *stream);

fgetc()函數將把由流指標指向的檔案中的一個字元讀出,例如: ch=fgetc(fp); 將把流指標fp指向的檔案中的一個字元讀出,並賦給ch,當執行fgetc()函數時,若當時檔案指標指到檔案尾,即遇到檔案結束標誌EOF(其對應值為-1),則該函數傳回一個-1給ch ,在程式中常用檢查該函數傳回值是否為-1來判斷是否已讀到文件尾,從而決定是否繼續。

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main()
{
    FILE *fp;
    char ch;
    if((fp=fopen("123.txt","r"))==NULL)
        printf("file cannot open \n");
    else
        printf("file opened for writing \n");
    while((ch=fgetc(fp))!=EOF)
        fputc(ch,stdout); //这里是输出到屏幕
    if(fclose(fp)!=0)
        printf("file cannot be closed \n");
    else
        printf("file is now closed \n");
    return 0;
}

該程式以唯讀方式開啟123.txt文件,在執行while循環時,文件指標每循環一次後移一個字元位置。用fgetc()函數將檔案指標指定的字元讀到ch變數中,然後用fputc()函數在螢幕上顯示,當讀到檔案結束標誌EOF時,關閉該檔案。上面的程式用到了fputc()函數,該函數將字元變數ch的值寫到流指標指定的檔案中去,由於流指標用的是標準輸出(顯示器)的FILE指標stdout,故讀出的字元將在顯示器上顯示。又例如: fputc(ch,fp); 此函數執行結構,將把ch表示的字元送到流指標fp指向的檔案中去。

在TC中,putc()等價於fputc(),getc()等價於fgetc()。 putchar(c)相當於fputc(c,stdout);getchar()相當於fgetc(stdin)。請注意,這裡使用char ch,其實是不科學的,因為最後判斷結束標誌時,是看ch!=EOF,而EOF的值為-1,這顯然和char是不能比較的。所以,某些使用,我們都定義成int ch

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main()
{
    FILE *fp;
    if((fp=fopen("123.txt","a"))==NULL)
        printf("file cannot open \n");
    else
        printf("file opened for writing \n");
    char ch=&#39;e&#39;;
    fputc(ch,fp); //输入到文件中
    if(fclose(fp)!=0)
        printf("file cannot be closed \n");
    else
        printf("file is now closed \n");
    return 0;
}

(2).讀寫檔案中字串的函數

char *fgets(char *string,int n,FILE *stream);
char *gets(char *s);
int fprintf(FILE *stream,char *format,variable-list);
int fputs(char *string,FILE *stream);
char *puts(char *s);
int fscanf(FILE *stream,char *format,variable-list);

其中fgets()函数将把由流指针指定的文件中n-1个字符,读到由指针string指向的字符数组中去,例如: fgets(buffer,9,fp); 将把fp指向的文件中的8个字符读到buffer内存区,buffer可以是定义的字符数组,也可以是动态分配的内存区。 

注意,fgets()函数读到'/n'就停止,而不管是否达到数目要求。同时在读取字符串的最后加上'/0'。 fgets()函数执行完以后,返回一个指向该串的指针。如果读到文件尾或出错,则均返回一个空指针NULL,所以长用feof()函数来测定是否到了文件尾或者是ferror()函数来测试是否出错,

检测是否已到文件尾,是返回真,否则返回0,其原型是int feof(FILE *stream);

例:if(feof(fp))printf("已到文件尾");

原型是int ferror(FILE *stream);返回流最近的错误代码,可用clearerr()来清除它,clearerr()的原型是void clearerr(FILE *stream);

例:printf("%d",ferror(fp));

例如下面的程序用fgets()函数读test.txt文件中的第一行并显示出来:

#include "stdio.h" 
int main() {
    FILE *fp; 
    char str[128]; 
    if((fp=fopen("123.txt","r"))==NULL) {
        printf("cannot open file/n"); exit(1);
    } 
    while(!feof(fp)) {
        if(fgets(str,128,fp)!=NULL)
        printf("%s",str);
    }
    fclose(fp);
}

相关学习推荐:C视频教程

以上是c語言檔案讀寫操作有哪些?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn