日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

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

作者:。菀枯。 ? 更新時間: 2022-08-21 編程語言

1.為什么使用文件

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

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

2.什么是文件

2.1文件分類

在程序設計中,一般將文件分為兩部分:程序文件和數據文件

程序文件:

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

數據文件:

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

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

2.2 文件名

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

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

c:\code\test.txt

3.文件的打開和關閉

3.1文件指針

想要打開一個文件,我們需要使用到文件指針,該指針是由系統聲明的,例如,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;

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

3.2 如何使用文件指針

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

FILE* pf

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

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

filename: 文件名

mode : 文件的打開方式

下面是一些常見的mode

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

注:這里的輸入是指將數據寫到內存中,輸出是寫到文件中

3.讀寫數據后使用fclose關閉文件。

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

4.文件的讀寫

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

首先我想介紹一些函數

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

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

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

void Save(Contact* con) //將數據存儲到文件中
{
	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);//將數據寫到contect.txt中
	}
	fclose(fp); //關閉文件
	fp = NULL;
}

void Load(Contact* con) //將文件中的數據加載到內存中
{
	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的返回值為讀到數據的個數,用來判斷是否繼續讀取
		{
			Check_capacity(con);//檢測通訊錄容量是否足夠
			con->data[con->count] = tmp;
			con->count++;
		}
	}
	fclose(fp);
	fp = NULL;
}

原文鏈接:https://blog.csdn.net/m0_60447315/article/details/123565227

欄目分類
最近更新