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

深入了解C語言中常見的文件操作方法

 更新時間:2022年06月29日 11:26:09   作者:。菀枯。  
這篇文章主要為大家詳細介紹了C語言中常見的文件操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

1.為什么使用文件

大家在寫程序的時候有沒有一個困惑,就是我寫的程序,輸入一些數(shù)據(jù)后,當我把程序關(guān)掉以后數(shù)據(jù)就消失了。這是因為程序運行時,所有的數(shù)據(jù)都存儲在內(nèi)存中,當程序退出后,程序中的數(shù)據(jù)自然就不存在了。等下次再運行程序時,又要重新錄入數(shù)據(jù),非常難受

? 如何解決這個問題呢,我們可以學(xué)習(xí)使用文件來將其保存

2.什么是文件

2.1文件分類

在程序設(shè)計中,一般將文件分為兩部分:程序文件和數(shù)據(jù)文件

程序文件:

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

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

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

這次我們想要聊的是第二種數(shù)據(jù)文件,它可以幫助將我們運行時的數(shù)據(jù)存儲到磁盤中,以便我們下次使用

2.2 文件名

每一個文件都有自己的名字,它由三部分組成

文件路徑+文件名主干+文件后綴

c:\code\test.txt

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

3.1文件指針

想要打開一個文件,我們需要使用到文件指針,該指針是由系統(tǒng)聲明的,例如,VS2013編譯環(huán)境提供的 stdio.h 頭文件中有以下的文件類型申明

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

相信很多人看到這里,已經(jīng)不想再讀下去了,堅持一下,前面這些并不重要

3.2 如何使用文件指針

首先我們需要定義一個文件指針

FILE* pf

想要將數(shù)據(jù)存儲到文件中或者從文件中讀取數(shù)據(jù),我們先要將文件打開,ANSIC 規(guī)定使用fopen函數(shù)來打開文件。

FILE * fopen ( const char * filename, const char * mode );

filename: 文件名

mode : 文件的打開方式

下面是一些常見的mode

文件使用方式含義如果指定文件不存在
“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+”(讀寫)打開一個二進制文件,在文件尾進行讀和寫建立一個新的文件

注:這里的輸入是指將數(shù)據(jù)寫到內(nèi)存中,輸出是寫到文件中

3.讀寫數(shù)據(jù)后使用fclose關(guān)閉文件。

int fclose ( FILE * stream );
// 示例
#include <stdio.h>
int main ()
{
  FILE * pFile;
  //打開文件
  pFile = fopen ("myfile.txt","w");
  //文件操作
  if (pFile!=NULL)
 {
    fputs ("fopen example",pFile);
    //關(guān)閉文件
    fclose (pFile);
 }
  return 0; 
}

4.文件的讀寫

現(xiàn)在我們知道了,如何去打開一個文件,那么如何將它的數(shù)據(jù)輸入到程序中呢?

首先我想介紹一些函數(shù)

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

看不懂? 沒關(guān)系,接下來我將用一個示例告訴你如何使用。

//這是我以前寫通信錄時用到的一些方法
typedef struct Contact
{
	struct contact_person* data;
	int count;	//通訊錄中人員個數(shù)
	int capacity;
}Contact;//通訊錄類型的指針

void Save(Contact* con) //將數(shù)據(jù)存儲到文件中
{
	FILE* fp = fopen("contact.txt", "wb");
	if (fp == NULL)
	{
		printf("Save()::%s", strerror(errno)); //如果打開失敗,報錯
		return;
	}
	else
	{
		fwrite(con->data, sizeof(struct contact_person), con->count, fp);//將數(shù)據(jù)寫到contect.txt中
	}
	fclose(fp); //關(guān)閉文件
	fp = NULL;
}

void Load(Contact* con) //將文件中的數(shù)據(jù)加載到內(nèi)存中
{
	FILE* fp = fopen("contact.txt", "r");
	if (fp == NULL)
	{
		printf("Load()::%s", strerror(errno));
		return;
	}
	else
	{
		struct contact_person tmp;
		while (fread(&tmp, sizeof(struct contact_person), 1, fp))// fread的返回值為讀到數(shù)據(jù)的個數(shù),用來判斷是否繼續(xù)讀取
		{
			Check_capacity(con);//檢測通訊錄容量是否足夠
			con->data[con->count] = tmp;
			con->count++;
		}
	}
	fclose(fp);
	fp = NULL;
}

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

相關(guān)文章

  • C++設(shè)計模式之工廠模式

    C++設(shè)計模式之工廠模式

    本文是C++設(shè)計模式系列文章的第一篇,主要給大家講述下工廠模式,非常的簡單實用,有需要的小伙伴可以參考下
    2016-05-05
  • Qt進程和線程QProcess和QThread的使用

    Qt進程和線程QProcess和QThread的使用

    本文主要介紹了Qt進程和線程QProcess和QThread的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 一文詳解Qt中的對象樹機制

    一文詳解Qt中的對象樹機制

    Qt提供了對象樹機制,能夠自動、有效的組織和管理繼承自QObject的Qt對象。這篇文章將通過一些示例為大家介紹一下Qt中對象樹機制的使用,需要的可以參考一下
    2023-03-03
  • C++ tuple元組的基本用法(總結(jié))

    C++ tuple元組的基本用法(總結(jié))

    這篇文章主要介紹了C++ tuple元組的基本用法(總結(jié)),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • C++中vector<vector<int>?>的基本使用方法

    C++中vector<vector<int>?>的基本使用方法

    vector<vector<int>?>其實就是容器嵌套容器,外層容器的元素類型是vector<int>,下面這篇文章主要給大家介紹了關(guān)于C++中vector<vector<int>?>的基本使用方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • Qt繪制圖表的實現(xiàn)

    Qt繪制圖表的實現(xiàn)

    Qt中提供了強大的2D繪圖系統(tǒng),可以使用同一API實現(xiàn)在屏幕和繪圖設(shè)備上進行繪制,本文就詳細的介紹了Qt繪制坐標圖、柱狀圖、折線圖、餅圖、曲線圖、散點圖等,感興趣的可以了解一下
    2021-05-05
  • C++設(shè)置事件通知線程工作的方法

    C++設(shè)置事件通知線程工作的方法

    這篇文章主要介紹了C++設(shè)置事件通知線程工作的方法,是Windows應(yīng)用程序設(shè)計中非常實用的技巧,需要的朋友可以參考下
    2014-10-10
  • C語言 超詳細講解庫函數(shù)

    C語言 超詳細講解庫函數(shù)

    C語言庫函數(shù)是把自定義函數(shù)放到庫里,是別人把一些常用到的函數(shù)編完放到一個文件里,供程序員使用,下面讓我們一起來詳細了解它
    2022-03-03
  • C語言數(shù)據(jù)結(jié)構(gòu)之迷宮問題

    C語言數(shù)據(jù)結(jié)構(gòu)之迷宮問題

    這篇文章主要為大家詳細介紹了C語言數(shù)據(jù)結(jié)構(gòu)之迷宮問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • 仿寫C語言string.h頭文件檢驗字符串函數(shù)

    仿寫C語言string.h頭文件檢驗字符串函數(shù)

    這里給大家分享的是一個C語言string.h頭文件檢驗字符串函數(shù)的仿寫,非常的簡單實用,小編覺得這篇文寫的還不錯,希望能夠給你帶來幫助
    2021-11-11

最新評論

盐山县| 北辰区| 丘北县| 翁牛特旗| 永泰县| 德化县| 红河县| 塘沽区| 胶南市| 昌黎县| 东莞市| 南开区| 扶余县| 仪征市| 会东县| 集安市| 陵水| 保康县| 石嘴山市| 北海市| 桃园市| 蛟河市| 新平| 蕲春县| 托克逊县| 大洼县| 东海县| 通许县| 贺州市| 仁化县| 自贡市| 浦城县| 黄梅县| 清原| 承德市| 梁河县| 华坪县| 宣威市| 清远市| 昌都县| 临汾市|