亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

C語言中怎么實現文件操作

發布時間:2021-10-18 09:17:35 來源:億速云 閱讀:105 作者:柒染 欄目:開發技術

本篇文章給大家分享的是有關C語言中怎么實現文件操作,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

    什么是文件

    磁盤上的文件是文件

    但是在程序設計中,我們一般談的文件有兩種:程序文件和數據文件(從文件功能的角度來分類)。

    程序文件

    包括源程序文件(例如.c文件)目標文件(windows環境后綴為.obj)可執行程序(windos環境后綴為exe)。

    數據文件 (本文重點)

    文件的內容不一定是程序,而是程序運行時讀寫的數據,比如程序運行需要從中讀取數據的文件,或者輸出內容的文件。

    文件名

    文件就像人一樣,他也要有姓氏和名字來讓其他文件或者人知道這個文件是誰。

    對于每一個文件要,,都有一個唯一的文件標識,以便用戶識別和引用。

    文件名格式:文件路徑+文件名主干+文件后綴

    例如:D:\CSDN\Test.txt

    為了方便起見,我們叫文件標識為文件名

    文件的打開和關閉

    文件指針

    我們知道,指針是指向一個地址的,整形指針指向一個整形的空間,數組指針指向一個數組的空間,那么文件指針自然就是指向文件的指針了。

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

    這是再vs的stdio頭文件下的文件信息區結構體

    struct _iobuf {
            char *_ptr;
            int   _cnt;
            char *_base;
            int   _flag;
            int   _file;
            int   _charbuf;
            int   _bufsiz;
            char *_tmpfname;
            };
    typedef struct _iobuf FILE;
    //不同的C編譯器的FILE類型包含的內容不完全相同,但是大同小異。

    就像學生要有學號姓名年齡這些信息一樣,文件也有他的信息,比如這個文件的地址。這些信息存放于這個結構體中,通過typedef重命名為FILE,并且我們不需要關心一些細節(你會關心我昨天晚上吃了什么嗎)。

    一般都是通過一個FILE的指針來維護這個FILE結構的變量,這樣使用起來更加方便。

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

    FILE* pf;

    pf通過該文件信息區中的信息就能夠訪問該文件。

    也就是說,通過文件指針變量能夠找到與它關聯的文件。

    但上面的文件指針并未指向明確的位置,他暫時是一個野指針

    所以接下來,我們來學習如何打開(創建)一個文件。

    文件函數

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

    在編寫程序的時候,在打開文件的同時,都會返回一個FILE*的指針變量指向該文件,也相當于建立了指針和文件的關系。

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

    //打開文件
    FILE* fopen(const char *filename,const char *mode);
    //第一個參數是文件名,第二個參數是打開方式
    //關閉文件
    int Fclose(FILE *stream);

    部分打開方式如下圖

    C語言中怎么實現文件操作

    現在我們來練習一下打開文件

    //打開文件
    	FILE* pf = fopen("data.txt","r");
    	//以只讀的方式打開這個文件
    	//如果文件打開失敗會返回空,否則會返回指向該文件的指針
    	if (pf == NULL){
    		perror("fopen");
    		return -1;
    	}
    	//讀文件
    	//關閉文件
    	fclose(pf);
    	pf = NULL;
    	return 0;

    C語言中怎么實現文件操作

    但是卻打開失敗了!!

    原因是,從上面的打開方式一圖我們可以看出,以"r"方式打開,需要該文件真實存在,但是我并沒有創建這個文件,所以打開失敗了

    叮~文件創建成功

    我們再來看執行結果

    C語言中怎么實現文件操作

    這回沒有報錯

    但是,這里是將data.txt文件放在了該.c文件目錄下,在我將該文件放在別的地方,仍然打開失敗報錯。

    原因是,我們這段代碼只輸入了文件名,所以他只在當前文件目錄下尋找該文件,在其他地方的文件我們就找不到了。

    這里我們來看看兩個東西,一個叫相對路徑,一個叫絕對路徑

    相對路徑與絕對路徑

     相對路徑

    只認為是當前目錄下的文件,如上面的代碼中。

    絕對路徑

    帶上文件的從磁盤到目標文件的路徑

    例如

    D:\Program Files\data.txt

    但是請注意,在編程中,\是轉義字符,所以我們需要讓\不再是轉義字符,使其代表它本身

    D:\Program Files\data.txt

    輸入輸出流

    什么是輸入輸出流

    學習過編程,一定知道printf或者cout或者System.out.println吧,

    這些函數用于打印數據,這就是標準的輸出流。使數據輸出或者寫入文件中,我們叫輸出流。

    我們打印HELLO WORLD在屏幕上,就是一個標準輸出流

    像scanf之類的,從文件輸入或者讀數據到內存中,就是輸入流。

    一些基本的輸入輸出函數如下。

    C語言中怎么實現文件操作

    比如,fputc就是寫一個字符進去,fgetc就是讀一個字符。

    //打開文件
    	FILE* pf = fopen("data.txt","w");
    	if (pf == NULL){
    		perror("fopen");
    		return -1;
    	}
    	//讀文件
    	fputc('a', pf);
    	fputc('b', pf);
    	fputc('c', pf);
    	//fputc第一個參數為輸入的字符,第二個使對應文件的指針
    
    	//關閉文件
    	fclose(pf);
    	pf = NULL;
    	return 0;

    C語言中怎么實現文件操作

    寫入了abc三個字符。

    fputc和fgetc每次讀/寫一個字符后,文件指針pf會向后移動,類似strtok函數。會記錄上一次輸入/輸出的地址。

    如果不這樣,那豈不是一直在一個位置重復寫入或者讀文件了。

    接下來看看fgetc讀取字符

    //打開文件
    	FILE* pf = fopen("data.txt","r");
    	if (pf == NULL){
    		perror("fopen");
    		return -1;
    	}
    	//讀文件
    
    	int a = fgetc(pf);
    	printf("%c", a);
    	a = fgetc(pf);
    	printf("%c", a);
    	a = fgetc(pf);
    	printf("%c",a);
    	//關閉文件
    	fclose(pf);
    	pf = NULL;
    	return 0;

    執行結果

    C語言中怎么實現文件操作

    這就是順序讀寫,按著順序讀入寫入。

    當然,有順序讀寫,就會有隨機讀寫

    從字面意思就能看到,隨機讀寫emmm。

    當然,除了fgetc這類,fgets自然就是讀取一行了(只會讀/寫一行哦)

    如果你用這類函數輸出在標準輸入或者標準輸入(stdout或者stdin)上,他和printf,scanf沒什么區別。

    接下來,我們來看二進制的讀和寫

    二進制讀寫

    fwirte

    C語言中怎么實現文件操作

    以二進制的形式將內容寫入文件中

    第一個參數是你要寫入數據的數據地址,第二個參數是一個類型的大小(字節)。第三個參數是你要寫入幾個數據,第四個則是你選定寫入的流。

    struct S{
    	int n;
    	double d;
    	char name[10];
    };
    
    int main()
    {
    	struct S s = { 10, 3.14, "zhangsan" };
    	//打開文件
    	FILE* pf = fopen("data.txt","wb");
    	if (pf == NULL){
    		perror("fopen");
    		return -1;
    	}
    	//讀文件
    	fwrite(&s,sizeof(s),1,pf);
    
    	//關閉文件
    	fclose(pf);
    	pf = NULL;
    	return 0;
    }

    如上代碼會將數據以二進制的形式寫入data.txt

    雖然我們看不懂,但是能看到zhangsan是我們輸入的內容

    C語言中怎么實現文件操作

    fread

    以二進制的形式讀

    C語言中怎么實現文件操作

    和fwirte一樣,只不過buffer不是const形式了,因為我們要將數據讀入該指針指向的目標。

    struct S{
    	int n;
    	double d;
    	char name[10];
    };
    
    int main()
    {
    	struct S s = {0};
    	//打開文件
    	FILE* pf = fopen("data.txt","rb");
    	if (pf == NULL){
    		perror("fopen");
    		return -1;
    	}
    	//讀文件
    	fread(&s,sizeof(struct S),1,pf);
    	printf("%d  %lf  %s\n",s.n,s.d,s.name);
    
    	//關閉文件
    	fclose(pf);
    	pf = NULL;
    	return 0;
    }

    C語言中怎么實現文件操作

    以上就是C語言中怎么實現文件操作,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

    向AI問一下細節

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

    AI

    江北区| 黄陵县| 浏阳市| 康马县| 平利县| 蒲江县| 乌拉特后旗| 沂南县| 武义县| 乌什县| 长乐市| 西吉县| 黎川县| 宁南县| 龙江县| 壤塘县| 山阴县| 温州市| 兴国县| 茶陵县| 岑溪市| 惠来县| 治县。| 肇庆市| 广丰县| 白城市| 清丰县| 梅河口市| 白山市| 利辛县| 木兰县| 石楼县| 莫力| 贡嘎县| 新干县| 科技| 姚安县| 化州市| 离岛区| 辰溪县| 洛浦县|