最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言全面梳理文件操作方法

 更新時間:2022年05月12日 09:27:10   作者:Iceevov  
這篇文章主要為大家詳細介紹了C語言的文件操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

1.什么是文件

我們先從基本概念入手,內(nèi)存中存放的數(shù)據(jù)在計算機關(guān)機后就會消失。要長久保存數(shù)據(jù),就要使用硬盤、光盤、U 盤等設(shè)備。為了便于數(shù)據(jù)的管理和檢索,引入了“文件”的概念。一篇文章、一段視頻、一個可執(zhí)行程序,都可以被保存為一個文件,并賦予一個文件名。操作系統(tǒng)以文件為單位管理磁盤中的數(shù)據(jù)。

1.1程序文件

包括源程序文件(后綴為.c),目標文件(windows環(huán)境后綴為.obj),可執(zhí)行程序(windows環(huán)境后綴為.exe)。

1.2數(shù)據(jù)文件

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

1.3文件名

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

文件名包含3部分:文件路徑+文件名主干+文件后綴

例如: c:\code\test.txt

為了方便起見,文件標識常被稱為文件名

2.為什么使用文件

當我們想把數(shù)據(jù)在計算機上保留下來,只有自己主動清理的時候才不復(fù)存在時我們加需要將數(shù)據(jù)保存在磁盤上,就需要用文件的方式。

這篇文章主要討論數(shù)據(jù)文件

3.文件的打開和關(guān)閉

3.1文件指針

當我們想要打開一個文件是就會用用到文件指針。每個被使用的文件都在內(nèi)存中開辟了一個相應(yīng)的文件信息區(qū),用來存放文件的相關(guān)信息(如文件的名字,文件狀態(tài)及文件當前的位置等)。這些信息是保存在一個結(jié)構(gòu)體變量中的。該結(jié)構(gòu)體類型是有系統(tǒng)聲明的,取名FILE。每當打開一個文件的時候,系統(tǒng)會根據(jù)文件的情況自動創(chuàng)建一個FILE結(jié)構(gòu)的變量,并填充其中的信息,使用者不必關(guān)心細節(jié)。

一般都是通過一個FILE的指針來維護這個FILE結(jié)構(gòu)的變量,這樣使用起來更加方便

FILE* pf//文件指針變量

定義pf是一個指向FILE類型數(shù)據(jù)的指針變量??梢允筽f指向某個文件的文件信息區(qū)(是一個結(jié)構(gòu)體變量)。通過該文件信息區(qū)中的信息就能夠訪問該文件。也就是說,通過文件指針變量能夠找到與它關(guān)聯(lián)的文件。

3.2文件的打開和關(guān)閉

在文件的打開和關(guān)閉中我們需要用到兩個庫函數(shù),fopen和fclose,因為在ANSIC 規(guī)定使用fopen函數(shù)來打開文件,fclose來關(guān)閉文件。當我們打開文件過后我們需要判斷一下時候打開文件成功才能進行下一步操作,等操作完畢后關(guān)閉文件,在使用fopen的時候需注意的是我們需要兩個參數(shù),一個是文件名,一個是打開方式。打開方式圖標和代碼演示如下。

文件使用方式含義如果指定文件不存在
"r"(只讀)為了輸入數(shù)據(jù),打開一個已經(jīng)存在的文本文件 出錯
"w"(只寫)為了輸出數(shù)據(jù),打開一個文本文件建立一個新的文件
"a"(追加)向文本文件尾添加數(shù)據(jù)建立一個新的文件
"rb"(只讀)為了輸入數(shù)據(jù),打開一個二進制文件出錯
"wb"(只寫)為了輸出數(shù)據(jù),打開一個二進制文件建立一個新文件
"ab"(追加)向一個二進制文件尾添加數(shù)據(jù)出錯
"r+"(讀寫)為了讀和寫,打開一個文本文件出錯
"w+"(讀寫)為了讀和寫,建立一個新的文件建立一個新的文件
"a+"(讀寫)打開一個文件,在文件尾進行讀寫建立一個新的文件
"rb+"(讀寫)為了讀和寫打開一個二進制文件出錯
"wb+"(讀寫)為了讀和寫,新建一個新的二進制文件建立一個新的文件
"ab+"(讀寫)打開一個二進制文件,在文件尾進行讀和寫建立一個新的文件
#include<stdio.h>
int main()
{
    //打開文件
    FILE* pf = fopen("test.txt","w")//w代表write,表示寫文件
    //判斷文件是否打開
    if(pf == NULL)
    {
        perror("fopen");//打開失敗返回錯誤信息
        return;
    }
    //寫文件
    //關(guān)閉文件
    fclose(pf);
    pf=NULL;
    return 0;
}

4.文件的順序讀寫

在對文件進行一些順序讀寫的時候我們需要用到一些功能函數(shù)如下:

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

什么是流

流是個抽象的概念,是對輸入輸出設(shè)備的抽象。設(shè)備可以是文件,網(wǎng)絡(luò),內(nèi)存等。流具有方向性,至于是輸入流還是輸出流則是一個相對的概念,一般以程序為參考,如果數(shù)據(jù)的流向是程序至設(shè)備,我們成為輸出流,反之我們稱為輸入流??梢詫⒘飨胂蟪梢粋€“水流管道”,水流就在這管道中形成了,自然就出現(xiàn)了方向的概念。

相對于編譯器來說 輸入:將文件中的數(shù)據(jù)拿出來 輸出:將數(shù)據(jù)放入文件中

這里用代碼給大家演示一下輸入與輸出:

int main()
{
    //打開文件
	FILE* pf = fopen("test.txt", "w");//寫
	if (pf == NULL)
	{
		perror("fopen");
		return;
	}
    //寫如abcd
	fputc('a', pf);
	fputc('b', pf);
	fputc('c', pf);
	fputc('d', pf);
    //關(guān)閉文件
	fclose(pf);
	pf = NULL;
	return 0;
}

那么現(xiàn)在文件里已經(jīng)有數(shù)據(jù)了(“abcde”),我們想把數(shù)據(jù)拿出來呢?我們就要用到輸入。代碼演示如下:

int main()
{
	FILE* pf = fopen("test.txt", "r");//讀
	if (pf == NULL)
	{
		perror("fopen");
		return;
	}
	//拿出字符a
	int ch = fgetc(pf);
	printf("%c\n", ch);
	fclose(pf);
	pf = NULL;
	return 0;
}

當我們讀了字符'a'過后,偏移量從0變到1,這就叫順序讀寫。

這里我們對比一組函數(shù):

scanf - 格式化的輸入函數(shù)

printf - 格式化的輸出函數(shù)

fscanf - 針對所有輸入流的格式化的輸入函數(shù)

fprintf - 針對所有輸出流的格式化輸出函數(shù)

sscanf - 把一個字符串轉(zhuǎn)換成格式化的數(shù)據(jù)

sprintf - 把一個格式化的數(shù)據(jù)轉(zhuǎn)換成字符串

5.文件的隨機讀寫

5.1fseek

fseek是根據(jù)文件指針位置和偏移量來定位文件指針的函數(shù)

int fseek ( FILE * stream, long int offset, int origin );
// offset - 偏移量
// origin表示如下:
//1.SEEK_CUR - 文件指針當前的位置
//2.SEEK_END - 文件末尾的位置
//3.SEEK_SET - 文件開始的位置

我們采用上面的列子,在文件中輸入了"abcd",我們想找到 'c' 該怎么做呢代碼演示:

int main()
{
	//打開文件
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return;
	}
	//寫文件
	fseek(pf, 2, SEEK_CUR);//c相對于文件當前位置的的偏移量為2
	int ch = fgetc(pf);
	printf("%c\n", ch);
	//關(guān)閉文件
	fclose(pf);
	pf = NULL;
	return 0;
}

5.2ftell

返回文件相對于起始位置的偏移量,返回的數(shù)據(jù)類型為long

long int ftell ( FILE * stream );

用法很簡單,用上面的例子來給大家講解,我們首先將使用fseek函數(shù)將偏移量改到2,隨后用fgetc函數(shù)后,偏移量向后移,目前偏移量應(yīng)該是3.

int main()
{
	//打開文件
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return;
	}
	//寫文件
	fseek(pf, 2, SEEK_CUR);//c相對于文件當前位置的的偏移量為2
	int ch = fgetc(pf);
	printf("%c\n", ch);
    //重置偏移量
    long pos = ftell(pf);//3
    printf("%d\n",pos);
	//關(guān)閉文件
	fclose(pf);
	pf = NULL;
	return 0;
}

5.3rewind

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

void rewind ( FILE * stream );
int main()
{
	//打開文件
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return;
	}
	//寫文件
	fseek(pf, 2, SEEK_CUR);//c相對于文件當前位置的的偏移量為2
	int ch = fgetc(pf);
	printf("%c\n", ch);
	long pos = ftell(pf);
	printf("%d\n", pos);
    //重置偏移量
    rewind(pf);
    pos = ftell(pf);
	printf("%d\n", pos);
	//關(guān)閉文件
	fclose(pf);
	pf = NULL;
	return 0;
}

到此這篇關(guān)于C語言全面梳理文件操作方法的文章就介紹到這了,更多相關(guān)C語言文件操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • QT設(shè)置widget背景圖片不影響widget內(nèi)其他控件背景的方法

    QT設(shè)置widget背景圖片不影響widget內(nèi)其他控件背景的方法

    這篇文章主要給大家介紹了關(guān)于QT設(shè)置widget背景圖片不影響widget內(nèi)其他控件背景的方法,軟件的界面為了更直觀或美觀,常常需要通過圖片來表達,需要的朋友可以參考下
    2023-06-06
  • C語言讀取文件流的相關(guān)函數(shù)用法簡介

    C語言讀取文件流的相關(guān)函數(shù)用法簡介

    這篇文章主要介紹了C語言讀取文件流的相關(guān)函數(shù)用法簡介,包括fread()函數(shù)和feof()函數(shù)的使用,需要的朋友可以參考下
    2015-08-08
  • 詳談C++ socket網(wǎng)絡(luò)編程實例

    詳談C++ socket網(wǎng)絡(luò)編程實例

    這篇文章主要為大家介紹了C++ socket網(wǎng)絡(luò)編程實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • c++11新增的便利算法實例分析

    c++11新增的便利算法實例分析

    這篇文章主要介紹了c++11新增的便利算法,主要有用于判斷、查找、數(shù)組、序列等的操作算法,非常具有實用價值,需要的朋友可以參考下
    2014-09-09
  • C語言實現(xiàn)三子棋小游戲

    C語言實現(xiàn)三子棋小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)三子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C語言:代碼宏詳解

    C語言:代碼宏詳解

    這篇文章主要介紹了 C語言宏定義使用實例詳解的相關(guān)資料,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • 詳細分析C++ 異常處理

    詳細分析C++ 異常處理

    這篇文章主要介紹了C++ 異常處理的的相關(guān)資料,文中示例代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • c++獲取sqlite3數(shù)據(jù)庫表中所有字段的方法小結(jié)

    c++獲取sqlite3數(shù)據(jù)庫表中所有字段的方法小結(jié)

    本文給大家分享c++獲取sqlite3數(shù)據(jù)庫表中所有字段的三種常用方法,本文針對每一種方法給大家詳細介紹,需要的的朋友通過本文一起學(xué)習(xí)吧
    2016-11-11
  • c語言實現(xiàn)可自定義的游戲地圖

    c語言實現(xiàn)可自定義的游戲地圖

    這篇文章主要為大家詳細介紹了c語言實現(xiàn)可自定義的游戲地圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++實現(xiàn)賓館房間管理系統(tǒng)

    C++實現(xiàn)賓館房間管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)賓館房間管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05

最新評論

福贡县| 洱源县| 菏泽市| 玉环县| 临清市| 遂溪县| 江达县| 赫章县| SHOW| 左云县| 深泽县| 盈江县| 吴川市| 时尚| 濮阳市| 梁河县| 左云县| 自贡市| 靖边县| 互助| 库伦旗| 醴陵市| 罗平县| 玛纳斯县| 广饶县| 华蓥市| 奇台县| 体育| 绥滨县| 龙岩市| 建平县| 海城市| 缙云县| 定兴县| 嘉峪关市| 延寿县| 唐海县| 略阳县| 红原县| 抚远县| 衡水市|