91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言常見的文件操作函數有什么

發布時間:2022-01-06 19:44:17 來源:億速云 閱讀:142 作者:柒染 欄目:開發技術

這篇文章給大家介紹C語言常見的文件操作函數有什么,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

    一、文件的打開和關閉

    1、文件指針

    每個被使用的文件都在內存中開辟了一個相應的文件信息區,用來存放文件的相關信息(如文件的名字,文件狀態及文件當前的位置等)。這些信息是保存在一個結構體變量中的。該結構體類型是有系統聲明的,取名FILE。

    vs2013編譯環境提供的stdio.h頭文件中有以下文件類型申明:

    struct _iobuf {
    	char *_ptr;
    	int _cnt;
    	char *_base;
    	int _flag;
    	int _file;
    	int _charbuf;
    	int _bufsiz;
    	char *_tmpfname;
    };
    typedef struct _iobuf FILE;

    每當打開一個文件的時候,系統會根據文件的情況自動創建一個FILE結構的變量,并填充其中的信息,一般都是通過一個FILE指針來維護這個FILE結構的變量,這樣使用起來更加方便。

    下面我們可以創建一個FILE*的指針變量:

    FILE* pf;//文件指針變量

    通過文件指針變量能夠找到與它關聯的文件。

    2、文件打開和關閉

    文件在讀寫之前需要先打開文件,使用結束后需要關閉文件。

    規定使用fopen來打開文件,fclose來關閉文件。

    //打開文件FILE* fp=fopen(const char* filename,const char* mode);//兩個參數:打開的文件名和打開方式//關閉文件fcolse(fp);//打開文件
    FILE* fp=fopen(const char* filename,const char* mode);
    //兩個參數:打開的文件名和打開方式
    //關閉文件
    fcolse(fp);

    常見打開文件方式如下:

    文件打開方式含義指定文件不存在
    “r"(只讀)為了輸入數據,打開一個文本文件出錯
    "w"(只寫)為了輸出數據,打開一個文本文件建立一個新的文本文件
    "a”(追加)向文件文本尾添加數據出錯
    "rb"(只讀)為了輸入數據,打開一個二進制文件出錯
    "wb"(只寫)為了輸出數據,打開一個二進制文件建立一個新的二進制文件
    "ab"(追加)向二進制文件尾添加數據出錯

    打開關閉文本文件示例如下:

    該文件以只寫方式打開,當代碼路徑下不存在該文本文件時,程序運行會自動生成新的文件;如果以只讀方式打開文件,該文本文件不存在時,程序運行后會顯示打開失敗。

    #include<stdio.h>
    int main()
    {
    	FILE* fp = fopen("text1.txt", "w");//打開文件文本
    	if (fp == NULL)//判斷是否打開成功
    	{
    		printf("Open File Error\n");
    		return;
    	}
    	fclose(fp);//關閉文件文本
    	return 0;
    }

    二、文件的順序讀寫 

    功能函數名適用范圍
    字符輸入函數fgetc所有輸入流
    字符輸出函數fputc所有輸出流
    文本行輸入函數fgets所有輸入流
    文本行輸出函數fputs所有輸出流
    格式化輸入函數fscanf所有輸入流
    格式化輸出函數fprintf所有輸出流
    二進制輸入函數fread文件
    二進制輸出函數fwrite文件

    1、fgetc()和fputc()函數

    • fgetc()函數是從指定文件中讀取一個字符,讀取到文件末尾或者讀取失敗時返回EOF。

    • fputc()函數用法如下:

    int fputc(int ch,FLEF* fp);

    ch為要寫入的字符,fp為文件指針。

    注:每寫入一個字符,文件內部位置指針向后移動一個字節。

    2、fgets()和fputs()函數 

    fgets()函數用法如下:

    char* fgets(char* buf,int n,FILE* fp);

    buf為存儲字符串的地址,n為讀取字符串的長度,fp為文件的指針。該函數每次最多只能讀取一行,遇到\n就會停止讀取,若有多行需要循環讀取。

    fputs()函數用法如下:

    int fputs(const char* str,FILE* fp);

    str為要寫入文件的字符串,fp為要操作的文件,返回值為0表示成功。寫入的字符串也是以\n結束,所以多行寫入需要重復操作。

    3、fscanf()和fprintf()函數

    fscanf()和fprintf()函數與前面使用的scanf()和printf()函數功能相似,都是格式化讀寫函數,兩者的區別在于fscanf()和fprintf()函數讀寫對象不是鍵盤和顯示器,而是磁盤文件

    兩個函數原型為:

    int fscanf(FILE* fp,char* fromat,……);
    int fprintf(FILE* fp,char* format,……);

    與scanf()和printf()相比,僅僅多了一個fp參數。

    4、fread()和fwrite()函數

    (1)fread()函數

    用于讀取二進制數據

    size_t fread(void* buf,size_t size,size_t count,FILE* fp);
    • fread返回實際讀取的完整項目數,如果發生錯誤或在達到計數之前遇到文件結尾,則該值可能小于計數。使用feof或ferror函數區分讀取錯誤和文件結束情況。如果大小或計數為0,則fread返回0且緩沖區內容不變。

    • buf為內存區塊的指針,用來存放讀取到的數據。

    • size表示每個數據塊的字節數。

    • count表示要讀取的數據塊的個數。

    • fp文件指針。

    (2)fwrite()函數

    size_t fwrite(const void* buf,size_t size,size_t count,FILE* fp);

    fwrite返回實際寫入的完整項的數量,如果發生錯誤,該數量可能小于count。buf用來存放要寫入的數據,其余參數與fread()寒素相同。

    三、文件的隨機讀寫

    1、fseek函數

    根據文件指針位置和偏移量來定位文件指針

    int fseek(FILE* stream,long int offset,int origin);

    第一個參數為文件指針;第二個參數為偏移量,正數表示向右偏移,負數表示向左偏移;第三個參數設定從文件的哪里開始偏移,可能取值:SEEK_CUR、SEEK_END、SEEK_SET。

    • SEEK_SET:文件開頭

    • SEEK_GUR:當前位置

    • SEEK_END:文件結尾

    其中SEEK_SET、SEEK_CUR、SEEK_END依次為0、1、2。

    2、ftell函數

    計算文件指針相對于起始位置的偏移量

    long int ftell(FILE* stream);

    3、rewind函數

    讓文件指針的位置回到文件的起始位置

    void rewind(FILE* stream);

    四、文本文件和二進制文件

    數據文件被分為文本文件和二進制文件。

    • 二進制文件:數據在內存中以二進制的形式存儲,不加轉換的輸出到外存。

    • 文本文件:以ASCII字符的形式存儲的文件。如果要求在外存上以ASCII碼的形式存儲,則需要在存儲前進行轉換。

    數據在內存中的存儲:字符以ASCII形式存儲;數值型數據既可以用ASCII形式存儲,也可使用二進制形式存儲。

    例:正數10000,以ASCII碼的形式輸出到磁盤,占用五個字節(每個字符一個字節);而以二進制形式輸出,在磁盤上只占用四個字節。

    五、文件讀取結束的判定

    • feof()函數用來判斷文件內部指針是否指向文件末尾,當指向文件末尾時返回非零值,否則返回零值。

    • ferror()函數用來判斷文件操作是否出錯,出錯時返回非零值,否則返回零值。

    注:在文件讀取過程中,不能使用feof()函數的返回值來直接判斷文件是否結束。而是應用于當文件讀取結束時,判斷是讀取失敗結束,還是遇到文件尾結束。

    1、文本文件讀取是否結束,判斷返回值是否為EOF(fgetc)、NULL(fgets)

    例如:

    • fgetc判斷是否為EOF

    • fgets判斷返回值是否為NULL.

    2、二進制文件的讀取結束判斷,判斷返回值是否小于實際要讀的個數。

    例如:

    • fread判斷返回值是否小于實際要讀的個數.

    六、文件緩沖區

    從內存向磁盤輸出數據會先送到內存中的緩沖區,裝滿緩沖區后再一起送到磁盤上。如果從磁盤像計算機讀入數據,則從磁盤文件中讀取數據輸入到內存緩沖區(充滿緩沖區),然后再從緩沖區逐個地將數據送到程序緩沖區。

    C語言常見的文件操作函數有什么

    #include <stdio.h>
    #include <windows.h>
    int main()
    {
    	FILE*pf = fopen("test.txt", "w");
    	fputs("abcdef", pf);//先將代碼放在輸出緩沖區
    	printf("睡眠10秒-已經寫數據了,打開test.txt文件,發現文件沒有內容\n");
    	Sleep(10000);
    	printf("刷新緩沖區\n");
    	fflush(pf);//刷新緩沖區時,才將輸出緩沖區的數據寫到文件(磁盤)
    	//注:fflush 在高版本的VS上不能使用了
    	printf("再睡眠10秒-此時,再次打開test.txt文件,文件有內容了\n");
    	Sleep(10000);
    	fclose(pf);
    	//注:fclose在關閉文件的時候,也會刷新緩沖區
    	pf = NULL;
    	return 0;
    }

    因為有緩沖區的存在,C語言在操作文件的時候,需要用fflush函數刷新緩沖區或者在文件操作結束的時候關閉文件。

    關于C語言常見的文件操作函數有什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    太保市| 金阳县| 洛隆县| 海南省| 东兴市| 太康县| 石城县| 陈巴尔虎旗| 依安县| 临夏县| 汤原县| 盈江县| 丹东市| 芷江| 浙江省| 吉隆县| 鸡东县| 阳山县| 察哈| 南投市| 海林市| 荣成市| 阿坝县| 晴隆县| 离岛区| 陕西省| 迭部县| 巫溪县| 陆川县| 新蔡县| 衡阳市| 长岭县| 扬中市| 张家川| 潞城市| 花莲县| 老河口市| 定南县| 平泉县| 塔城市| 余江县|