欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言文件操作詳解

 更新時間:2021年10月11日 11:45:29   作者:股神。  
這篇文章主要介紹了C語言 文件操作解析詳解及實例代碼的相關資料,需要的朋友可以參考下,希望能夠給你帶來幫助

一、什么是文件

在程序設計中,我們一般談的文件有兩種:程序文件、數(shù)據(jù)文件。

程序文件:

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

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

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

或者輸出內容的文件。

數(shù)據(jù)文件又分為”文本文件“和”二級制文件

二進制文件:數(shù)據(jù)在內存中以二進制的形式存儲,如果不加轉換的輸出到外存,這種文件我們是看不懂的是一堆亂七八糟的符號,只有電腦才可以讀懂。

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

存儲的文件就是文本文件。這種文件我們是看得懂的,例如我們在記事本看到的”字“”字母“”數(shù)字“,這樣的文件就是文本文件。

二、文件緩沖區(qū)

ANSIC采用”緩沖文件系統(tǒng)“來處理數(shù)據(jù)文件,系統(tǒng)會為每一個正在使用的文件開辟一塊”文件緩沖區(qū)“。當程序從內存向磁盤輸出數(shù)據(jù)時,會將數(shù)據(jù)先送到輸出緩沖區(qū)中,等輸出緩沖區(qū)滿了之后,才將數(shù)據(jù)一起送到磁盤;當程序從磁盤向內存讀數(shù)據(jù)時,數(shù)據(jù)會先被送到輸入緩沖區(qū),等輸入緩沖區(qū)滿了之后,才將數(shù)據(jù)一起送到磁盤;另外程序結束時,緩沖區(qū)的內容也會被送到內存或磁盤。

三、文件指針

每個被使用的文件都在內存中開辟了一個相應的文件信息區(qū),用來存放文件的相關信息(如文件的

名字,文件狀態(tài)及文件當前的位置等)。這些信息是保存在一個結構體變量中的。該結構體類型是

由系統(tǒng)聲明的,取名FILE。

該結構體聲明如下:

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

每當打開一個文件的時候,系統(tǒng)會根據(jù)文件的情況自動創(chuàng)建一個FILE結構的變量,我們就可以通

過創(chuàng)建一個FILE的指針來維護這個FILE結構的變量。

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

四、文件的打開和關閉。

文件的打開用fopen函數(shù),文件的關閉用fclose函數(shù)。

它們的原型如下:

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

int fclose ( FILE * stream );

filenname:這個參數(shù)填的是文件名

mode:這個參數(shù)代表要對文件進行的操作

stream:這個參數(shù)代表指向要關閉的文件的指針。

文件的操作方式有:

“r”(只讀):程序從一個文本文件讀入數(shù)據(jù),如果指定文件不存在會出錯 。

“w”(只寫):程序向一個文本文件輸出數(shù)據(jù),如果指定文件不存在會建立一個新的文件。

“a”(追加): 向文本文件尾添加數(shù)據(jù) ,如果指定文件不存在會出錯

“rb”(只讀): 程序從一個文件讀入數(shù)據(jù),只不過這個文件是二進制文件,如果指定文件不存在會出錯 。

“wb”(只寫): 程序向一個文件輸出數(shù)據(jù),只不過這個文件是二進制文件 ,如果指定文件不存在會建立一個新的文件

“ab”(追加): 向一個二進制文件尾添加數(shù)據(jù),,如果指定文件不存在會出錯

“r+”(讀寫): 為了讀和寫,這個文件是文本文件,如果文件不存在會出錯

“w+”(讀寫): 為了讀和寫,如果文件不存在會建立一個新的文件

“a+”(讀寫): 打開一個文件,在文件尾進行讀寫 ,如果文件不存在會建立一個新的文件

“rb+”(讀寫) :為了讀和寫,打開一個二進制文件 ,如果文件不存在會出錯

“wb+”(讀寫) :為了讀和寫一個二進制文件 ,如果文件不存在會建立一個新的文件

“ab+”(讀寫):在 二進制文件尾進行讀和寫 如果文件不存在會建立一個新的文件

文件的讀寫函數(shù)有(這些函數(shù)是順序讀寫):

字符輸入函數(shù):fgetc
字符輸出函數(shù):fputc
文本行輸入函數(shù):fgets
文本行輸出函數(shù):fputs
格式化輸入函數(shù):fscanf
格式化輸出函數(shù):fprintf
二進制輸入:fread
二進制輸出:fwrite

下面我們用代碼來體會:

int main()
{
	//打開文件
	FILE* pf = fopen("data.txt", "r");
	if (pf == NULL)
	{
        //如果沒有讀到,返回錯誤信息。
		perror("fopen");
		return -1;
	}
	//讀文件
	// 
	//關閉文件
	fclose(pf);
	pf = NULL;
 	return 0;
}

我們對data.txt,進行”r“(讀)操作,因為當前文件夾下沒有創(chuàng)建這個文件,所以出錯。

現(xiàn)在我們在當前目錄下,創(chuàng)建一個diata.txt文件夾,并輸入字符"abcd",使用fgetc函數(shù)來讀取數(shù)據(jù),這個函數(shù)的作用是讀取一個字符后,指針往下一個字符走。

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

結果為:

這是因為剛剛開始時,pf指針首先指向首字符”a“,讀完字符”a“后,pf指針就往下一個字符走,指向了字符”b“,讀完”b“后,pf指針繼續(xù)往下一個字符走,指向了字符”c“。

現(xiàn)在使用fgetc函數(shù)來讀取數(shù)據(jù),這個函數(shù)的作用是讀取一個字符串

int main()
{
	//打開文件
	FILE* pf = fopen("data.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return -1;
	}
	//讀文件
	char arr[20] = { 0 };
	fgets(arr, 20, pf);
	printf("%s", arr);
	//關閉文件
	fclose(pf);
	pf = NULL;
 	return 0;
}

結果是:

這個代碼的意思是從pf指向的那個文件讀取20個字符,存到數(shù)組arr中,我們知道文件只有4個字符,所以當文件不夠要被讀取字符數(shù),程序就只會把文件中的內容讀完,而不會報錯。

下面我們進行”w“操作,并分別使用fputc、fputs函數(shù)

fputc函數(shù)

int main()
{
	FILE* pf = fopen("test.txt", "w");
	if (NULL == pf)
	{
		perror("fopen");
		return -1;
	}
	//寫文件
	fputc('b', pf);
	fputc('i', pf);
	fputc('t', pf);
  	//關閉文件
	fclose(pf);
	pf = NULL;
 	return 0;
}

我們向test.txt文件進行寫操作,如果我們對一個文件進行寫操作,如果這個文件存在,且有內容,寫操作會將文件的內容銷毀,重新寫入目前我們要寫的內容。因為我們當前文件夾下沒有創(chuàng)建這樣的文件,所以程序自動幫我們創(chuàng)建,我們使用fputs函數(shù),這個函數(shù)的作用是向文件寫入一個字符,在這些代碼中,我們分別寫了”b“、”i“、”t“這幾個字符

fputs函數(shù)

int main()
{
	FILE* pf = fopen("test.txt", "w");
	if (NULL == pf)
	{
		perror("fopen");
		return -1;
	}
	//寫文件
	//寫一行數(shù)據(jù)
	fputs("hello world\n", pf);
	fputs("hello bit\n", pf);
 	//關閉文件
	fclose(pf);
	pf = NULL;
}

fputs函數(shù)的作用是向文件輸出一個字符串。因為這個文件在之前已經創(chuàng)建,且有字符”bit“,現(xiàn)在我們重新進行寫操作,字符”bit“會被銷毀,重新寫入hello world、hello bit這兩個字符串。

fprintf函數(shù)

struct S
{
	int n;
	double d;
};
 int main()
{
	struct S s = { 100, 3.14 };
 	FILE* pf = fopen("data.txt", "w");
	if (NULL == pf)
	{
		perror("fopen");
		return -1;
	}
	//寫文件
	fprintf(pf, "%d %lf", s.n, s.d);
 	//關閉文件
	fclose(pf);
	pf = NULL;
}

fprintf函數(shù)的作用是向pf指向的那個文件輸出格式化字符(所謂的格式化就是類似于代碼中"%d %lf"的格式),所以這個程序會向文件輸出”100“和”3.140000“.

fscanf函數(shù)

struct S
{
	int n;
	double d;
};
int main()
{
	struct S s = { 0 };
	FILE* pf = fopen("data.txt", "r");
	if (NULL == pf)
	{
		perror("fopen");
		return -1;
	}
	//讀文件
	fscanf(pf, "%d %lf", &(s.n), &(s.d));
 	printf("%d %lf\n", s.n, s.d);
 	//關閉文件
	fclose(pf);
	pf = NULL;
}

fscanf函數(shù)的作用是從文件中讀取格式化數(shù)據(jù),存到內存中,由是一個代碼只,文件中有”100“和”3.140000“這兩個數(shù)據(jù),所以這個程序會將這兩個數(shù)據(jù)讀到結構體變量s中.

最后兩個函數(shù)使用方法與fgetc fputc fgets fputs函數(shù)類似,我就不示例了,同學們自己來試試吧!!!!!

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

相關文章

  • 淺析C語言調試器GDB和LLDB的使用方法

    淺析C語言調試器GDB和LLDB的使用方法

    這篇文章主要介紹了C語言調試器GDB和LLDB的使用方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • C++ 實現(xiàn)2048游戲示例

    C++ 實現(xiàn)2048游戲示例

    《2048》是比較流行的一款數(shù)字游戲。原版2048首先在github上發(fā)布,原作者是Gabriele Cirulli。它是基于《1024》和《小3傳奇》的玩法開發(fā)而成的新型數(shù)字游戲。
    2014-06-06
  • C語言二分法求解方程根的兩種方法

    C語言二分法求解方程根的兩種方法

    這篇文章主要為大家詳細介紹了C語言二分法求解方程根的兩種方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • C++如何在變量前面加#

    C++如何在變量前面加#

    這篇文章主要介紹了C++如何在變量前面加#問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++中構造函數(shù)重載

    C++中構造函數(shù)重載

    這篇文章主要介紹了C++中構造函數(shù)重載的相關資料,十分的詳細,需要的朋友可以參考下
    2015-06-06
  • 劍指offer之C語言不修改數(shù)組找出重復的數(shù)字

    劍指offer之C語言不修改數(shù)組找出重復的數(shù)字

    今天小編就為大家分享一篇關于劍指offer之C語言不修改數(shù)組找出重復的數(shù)字,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • C語言實現(xiàn)簡單電子通訊錄

    C語言實現(xiàn)簡單電子通訊錄

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單電子通訊錄,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 字符串的組合算法問題的C語言實現(xiàn)攻略

    字符串的組合算法問題的C語言實現(xiàn)攻略

    這篇文章主要介紹了字符串的組合算法問題的C語言實現(xiàn)攻略,是根據(jù)ACM總結的經典算法問題,需要的朋友可以參考下
    2015-08-08
  • C語言中動態(tài)內存管理圖文詳解

    C語言中動態(tài)內存管理圖文詳解

    在編寫程序時,通常并不知道需要處理的數(shù)據(jù)量,或者難以評估所需處理數(shù)據(jù)量的變動程度,下面這篇文章主要給大家介紹了關于C語言中動態(tài)內存管理的相關資料,需要的朋友可以參考下
    2022-06-06
  • C++中圖片重命名實現(xiàn)代碼

    C++中圖片重命名實現(xiàn)代碼

    這篇文章主要介紹了C++中圖片重命名實現(xiàn)代碼,需要的朋友可以參考下
    2017-05-05

最新評論