亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言關(guān)于文件的操作方法總結(jié)

 更新時間:2021年11月20日 09:33:53   作者:Ersansui  
在任何程序的開發(fā)中,對于文件的操作都是繞不開的一個知識點,因為總是要用到存儲讀取的功能,今天我們來詳細了解C語言中是怎么操作文件的

什么是文件

程序文件

其實從文件的功能的角度來說:我們的文件可以分為兩種類型的文件:程序文件和數(shù)據(jù)文件。

就拿我們C語言的程序為例子,包括了程序文件,即后綴為.c的文件;目標(biāo)文件,即在windows環(huán)境下后綴為.obj的文件;可執(zhí)行程序文件,即后綴為.exe的文件。

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

數(shù)據(jù)文件,一般指的是用來存儲我們在使用應(yīng)用程序的時候需要讀寫的數(shù)據(jù)的文件。

而我們討論的文件的操作也指的是數(shù)據(jù)文件的操作。

文件名

文件名通常由三部分組成:

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

在這里插入圖片描述

為什么要使用文件

我們在運行程序的時候,總會產(chǎn)生一些數(shù)據(jù),如果我們不對數(shù)據(jù)進行存儲,那么等待程序結(jié)束的時候,數(shù)據(jù)就會消失。

舉個例子:我們上次寫過的簡易通訊錄(簡易版通訊錄),如果我們這一次運行了這個程序,輸入了信息,但是沒有對數(shù)據(jù)進行保存,關(guān)閉程序后,下次再次運行程序,就看不到之前的數(shù)據(jù)了。

而我們想要的是,把通訊錄的信息記錄下來,只有我們自己選擇刪除數(shù)據(jù)的時候,數(shù)據(jù)才不復(fù)存在。

而這就涉及到了數(shù)據(jù)持久化的問題,我們一般數(shù)據(jù)持久化的方法有,把數(shù)據(jù)存放在磁盤文件、存放到數(shù)據(jù)
庫等方式。

使用文件我們可以將數(shù)據(jù)直接存放在電腦的硬盤上,做到了數(shù)據(jù)的持久化。

文件的操作

文件緩沖區(qū)

C語言是使用“緩沖文件系統(tǒng)”來處理文本文件和二進制文件。

緩沖文件系統(tǒng)就是指系統(tǒng)自動地在內(nèi)存中為程序中每一個正在使用的文件開辟一個“文件緩沖區(qū)”、

這個文件緩沖區(qū)就相當(dāng)于一個“中間人”,會在程序數(shù)據(jù)區(qū)和硬盤文件中充當(dāng)一個過渡者的身份。

文件指針(FILE)

緩沖文件系統(tǒng)中,關(guān)鍵的概念是“文件類型指針”,簡稱“文件指針”。

每個被使用的文件都在內(nèi)存中開辟了一個相應(yīng)的文件信息區(qū),用來存放文件的相關(guān)信息(如文件的名
字,文件狀態(tài)及文件當(dāng)前的位置等)。這些信息是保存在一個結(jié)構(gòu)體變量中的。該結(jié)構(gòu)體類型是有系統(tǒng)聲明的,取名FILE.

使用該結(jié)構(gòu)體類型來定義文件指針時,需要包含頭文件<stdio.h>。

需要注意的是,不同的C編譯器的FILE類型包含的內(nèi)容不完全相同,但是大同小異。

每當(dāng)打開一個文件的時候,系統(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)的文件。

在這里插入圖片描述

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

我們在對文件進行讀寫之前應(yīng)該先打開文件,在使用結(jié)束之后應(yīng)該關(guān)閉文件。

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

ANSIC 規(guī)定使用fopen函數(shù)來打開文件,fclose來關(guān)閉文件。

//打開文件
FILE * fopen ( const char * filename, const char * mode );
//關(guān)閉文件
int fclose ( FILE * stream );

fopen

在這里插入圖片描述

該函數(shù)包含在<stdio.h>頭文件中,用于打開文件的操作。

形參列表列表中的第一個參數(shù)是文件的名稱,第二個參數(shù)是文件的打開方式。

如果打開成功,我們就可以用一個文件指針來接收返回值,用于管理這個文件;如果打開失敗,就會返回一個空指針。

因此,我們再接收該函數(shù)返回值的時候,應(yīng)該加上一步檢驗是否為空指針的操作。

fclose

在這里插入圖片描述

該函數(shù)同樣包含在<stdio.h>中

當(dāng)我們使用完文件的時候,記得要關(guān)閉文件。

我們通過fclose函數(shù),并把文件指針作為參數(shù)傳入即可。

如果關(guān)閉成功,該函數(shù)就返回0,如果關(guān)閉失敗,就會返回EOF(-1)。

文件的打開方式

文件有不同的打開方式,不同的打開方式對應(yīng)著不同的操作。

文件的使用方式 含義 如果指定文件不存在
“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* pFile;
	//打開文件
	pFile = fopen("myfile.txt", "w");
	//文件操作
	if (pFile != NULL)
	{
		fputs("fopen example", pFile);
		//關(guān)閉文件
		fclose(pFile);
	}
	return 0;
}

我們會看到,如果使用的是w的打開方式來使用文件的話,程序會在該代碼所在源文件的目錄下尋找你想要打開的文件,如果文件不存在的話,就會幫自動幫你創(chuàng)建一個。

但是,如果使用的打開方式是r,如果程序發(fā)現(xiàn)所在目錄不存在該文件,就會出錯。

例子如下

int main()
{
	FILE* pFile;
	//打開文件
	pFile = fopen("cmyfile.txt", "r");
	//文件操作
	if (pFile == NULL)
	{
		perror("fopen");
		return -1;
	}

	fputs("fopen example", pFile);
	//關(guān)閉文件
	fclose(pFile);
	return 0;
}

在這里插入圖片描述

當(dāng)我該源文件的文件夾中,并不存在這個文件時,就會出錯,并且我通過了perror這個函數(shù)把錯誤信息打印了出來。

需要注意的是,就像上面栗子那樣,只寫了文件名.后綴名,會默認(rèn)在該源文件所在的文件下進行查找,如果需要指定目錄,則需要在文件名前面加上文件路徑。

例如

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

注意

在C語言中,如果想要輸入路徑的話,我們一般使用斜杠(/),而不使用反斜杠(\),因為反斜杠是轉(zhuǎn)義的標(biāo)志,很有可能你的路徑中,剛好存在可以轉(zhuǎn)義的內(nèi)容,這樣就會導(dǎo)致失敗。如果要使用反斜杠,就要兩條反斜杠連在一起用。

以上就是我們在使用一個文件的時候的基本操作,先要打開文件,然后是對文件進行操作,最后是關(guān)閉文件。

流的相關(guān)概念

流是個高度抽象的概念,我們可以理解為這就相當(dāng)于時一條通道,就像水流一樣,輸入流可以看作一個輸入通道,輸出流可以看作一個輸出通道。

流,這一條通道,連接的是程序和外部設(shè)備。

當(dāng)外部設(shè)備需要把數(shù)據(jù)輸入到程序的時候,就需要輸入流。

當(dāng)程序需要把數(shù)據(jù)輸出到外部設(shè)備的時候,就需要輸出流。

按照我個人的理解

標(biāo)準(zhǔn)輸入流,就是連接程序和標(biāo)準(zhǔn)輸入設(shè)備(鍵盤)的通道。

標(biāo)準(zhǔn)輸出流,就是鏈接程序和標(biāo)準(zhǔn)輸出設(shè)備(屏幕)的通道。

文件的順序讀寫

順序讀寫,顧名思義,就是按照先后順序來進行讀取和寫入的操作。

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

fputc

在這里插入圖片描述

這個函數(shù)包含在<stdio.h>中,該函數(shù)時一個字符一個字符的輸入的。

第一個參數(shù)是我們想要輸入的字符,第二個參數(shù)就是輸入流。

我們可以這樣理解

我們通過這個函數(shù),把想要輸入的字符,放到對應(yīng)的流中,然后這個流,會把這個字符送到對應(yīng)的設(shè)備上。

如果我們寫的是標(biāo)準(zhǔn)輸出流,那么就會把數(shù)據(jù)輸出到屏幕上,我們就可以再控制臺看見了。

在這里插入圖片描述

fgets

在這里插入圖片描述

該函數(shù)同樣包含在<stdio.h>中,該函數(shù)是從流中獲得一個字符。

在這里插入圖片描述

還有剩下的函數(shù),就不一一舉例了,使用方法都大同小異。

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

相關(guān)文章

  • 使用C語言繪制柱形圖的示例代碼

    使用C語言繪制柱形圖的示例代碼

    常用的統(tǒng)計圖有條形圖、柱形圖、折線圖、曲線圖、餅圖、環(huán)形圖、扇形圖,這篇文章主要為大家介紹了C語言中繪制條形圖和柱形圖的方法,需要的可以參考下
    2024-02-02
  • C語言簡明講解隊列的實現(xiàn)方法

    C語言簡明講解隊列的實現(xiàn)方法

    隊列(Queue)與棧一樣,是一種線性存儲結(jié)構(gòu),它具有如下特點:隊列中的數(shù)據(jù)元素遵循“先進先出”(First?In?First?Out)的原則,簡稱FIFO結(jié)構(gòu)。在隊尾添加元素,在隊頭刪除元素
    2022-04-04
  • C++實踐數(shù)組類運算的實現(xiàn)參考

    C++實踐數(shù)組類運算的實現(xiàn)參考

    今天小編就為大家分享一篇關(guān)于C++實踐數(shù)組類運算的實現(xiàn)參考,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Matlab實現(xiàn)鼠標(biāo)光標(biāo)變成愛心和瞄準(zhǔn)鏡形狀

    Matlab實現(xiàn)鼠標(biāo)光標(biāo)變成愛心和瞄準(zhǔn)鏡形狀

    這篇文章主要為大家詳細介紹了如何利用Matlab實現(xiàn)將鼠標(biāo)光標(biāo)變成愛心和瞄準(zhǔn)鏡等形狀,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-08-08
  • 基于c++強制類型轉(zhuǎn)換的(總結(jié))詳解

    基于c++強制類型轉(zhuǎn)換的(總結(jié))詳解

    本篇文章對C++中的強制類型轉(zhuǎn)換進行了詳細的分析介紹。需要的朋友參考下
    2013-05-05
  • C++11的functional模塊介紹和使用案例

    C++11的functional模塊介紹和使用案例

    functional模塊是C++ 11提供了一組函數(shù)對象和算法,用于增強C++的函數(shù)式編程能力,本文主要介紹了C++11的functional模塊介紹和使用案例,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • C語言 野指針與空指針專篇解讀

    C語言 野指針與空指針專篇解讀

    全網(wǎng)最接地氣的C語言野指針介紹,此處對于野指針與空指針知識點做一些簡要的介紹,作者實屬初學(xué),寫博客也是作者學(xué)習(xí)的一個過程,難免文章中有內(nèi)容理解不到位或者有不當(dāng)之處,還請朋友們不吝指正,希望大家多多給予支持,贈人玫瑰,手有余香
    2021-11-11
  • C++運行時類型識別與轉(zhuǎn)換實現(xiàn)方法

    C++運行時類型識別與轉(zhuǎn)換實現(xiàn)方法

    運行時類型識別可能被認(rèn)為是C++中一個”次要“的特征,當(dāng)程序員在編程過程中陷入非常困難的境地時,實用主義將會幫助他走出困境
    2022-10-10
  • VTK8.1?在?Qt5.9?環(huán)境下的配置編譯和安裝過程

    VTK8.1?在?Qt5.9?環(huán)境下的配置編譯和安裝過程

    為了實現(xiàn)realsense的PCL點云顯示,需要VTK支持。由于整個平臺在Qt環(huán)境實現(xiàn),VTK編譯為Qt插件。整個過程并不復(fù)雜,網(wǎng)上的文章大多不全,自己梳理了一下,分享出來,需要的朋友可以參考下
    2022-07-07
  • 詳解C++-二階構(gòu)造模式、友元

    詳解C++-二階構(gòu)造模式、友元

    這篇文章主要介紹了C++-二階構(gòu)造模式、友元,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評論