定義:
?文件屬于文件的一種,與普通文件載體不同,文件是以硬盤(pán)為載體存儲(chǔ)在計(jì)算機(jī)上的信息集合。文件包括了文檔、圖片、視頻、程序組件等,每個(gè)類型的文件都有不同的作用或功用,例如一個(gè)程序通常由主程序、動(dòng)態(tài)庫(kù)、配置文件等組成,這些也是文件,起到支持程序運(yùn)行的作用。
1.文件的功能文件包含三部分:
1.文件路徑
2.文件后綴
3.文件名
?在寫(xiě)程序中,比如說(shuō)我們寫(xiě)的通訊錄,在運(yùn)行結(jié)束時(shí),通訊錄的信息會(huì)被刪除,那有沒(méi)有方法來(lái)存儲(chǔ)我們所需要的數(shù)據(jù)信息呢?答案是肯定的。數(shù)據(jù)被保存在硬盤(pán)中,那這樣我們使數(shù)據(jù)具有了可持續(xù)化的屬性。這是其中的一種功能.
2.文件的分類3.文件路徑 絕對(duì)路徑終端:是我們最終要操作的對(duì)象。
比如說(shuō):使用printf和scanf函數(shù)時(shí),printf的終端為屏幕,scanf的終端為鍵盤(pán)
定義:
?絕對(duì)路徑是指目錄下的絕對(duì)位置,直接到達(dá)目標(biāo)位置,通常是從盤(pán)符開(kāi)始的路徑。
相對(duì)路徑比如說(shuō):D:\Program Files (x86)\Microsoft Visual Studio\2019這就是一個(gè)絕對(duì)路徑
從起始盤(pán)開(kāi)始到目標(biāo)文件結(jié)束
定義:
?相對(duì)路徑就是指由這個(gè)文件所在的路徑引起的跟其它文件(或文件夾)的路徑關(guān)系。使用相對(duì)路徑可以為我們帶來(lái)非常多的便利。
4.文件信息區(qū)比如:D:\Program Files (x86)\Microsoft Visual Studio\2019
如果你的文件在D:\Program Files (x86)\Microsoft Visual Studio里面則要打開(kāi)2019
只需:2019
當(dāng)前路徑符號(hào):.
當(dāng)前路徑的上一路徑:…
以此類推:我們可以找到我們想要的文件
將目標(biāo)文件的相關(guān)信息存放到結(jié)構(gòu)體變量中,這樣的變量我們稱之為文件信息區(qū)
文件信息區(qū)的定義在:stdio.h ?中。
文件信息區(qū)一般用指針進(jìn)行操作,這里的文件指針指的可不只是文件。
下面這是VS2013的文件信息區(qū)的結(jié)構(gòu)變量的命名
struct _iobuf {char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
那指針就是FILE*(通常為文件操作函數(shù)的返回值)
5.文件緩沖區(qū)6.流的概念在程序結(jié)束時(shí),(VS2019)會(huì)主動(dòng)刷新緩沖區(qū),fclose函數(shù)也能主動(dòng)刷新緩沖區(qū),在沒(méi)有刷新緩沖區(qū)時(shí),數(shù)據(jù)是不會(huì)主動(dòng)放在文件中的,所以通常在我們編輯文件時(shí),我們通常會(huì)按下CTRL+S保存數(shù)據(jù)到文件中,這時(shí)我們就會(huì)刷新文件緩沖區(qū),把數(shù)據(jù)放在文件中。
?計(jì)算機(jī)中的流其實(shí)是一種信息的轉(zhuǎn)換。是一種高度抽象的概念。
7.輸入輸出二.文件函數(shù) 1.打開(kāi)與關(guān)閉文件 打開(kāi)文件——fopen 返回類型我們只需將所需的對(duì)目標(biāo)對(duì)象根據(jù)分類寫(xiě)到流里面去,但是數(shù)據(jù)怎么到目標(biāo),這是怎么實(shí)現(xiàn)的我們并不需要了解,我們只需要知道如何使用即可,這大大簡(jiǎn)化了我們學(xué)習(xí)編程的門(mén)檻。
在打開(kāi)程序的時(shí)候,默認(rèn)打開(kāi)三個(gè)流:
1.stdin(標(biāo)準(zhǔn)輸入流)——鍵盤(pán)
2.stdout(標(biāo)準(zhǔn)輸出流)——屏幕
3.stderr(標(biāo)準(zhǔn)錯(cuò)誤流)
FILE*的指針
參數(shù)打開(kāi)失敗時(shí):返回一個(gè)空指針。
打開(kāi)成功指向文件的起始地址。
一般來(lái)說(shuō)要進(jìn)行對(duì)返回值的檢查
1.文件路徑——const char * filename
2.模式(以哪種形式打開(kāi))——const char*mode
打開(kāi)的模式:
int
參數(shù)打開(kāi)成功:返回0
打開(kāi)失敗:返回EOF(-1)
文件指針——FILE * stream
2. 順序讀寫(xiě) 1.輸入輸出字符1.此函數(shù)會(huì)刷新緩沖區(qū),相當(dāng)于保存的作用
2.如果嚴(yán)謹(jǐn)?shù)脑拰?duì)返回值也需要進(jìn)行檢查,不過(guò)通常都不用
輸入字符函數(shù)——fgetc 返回類型?1. 輸入輸出字符函數(shù)適用于所有的流
?2.在讀取字符之后,讀取的內(nèi)容的指針自動(dòng)向后偏移一個(gè)字符的位置,讀取下一個(gè)字節(jié)
int
函數(shù)參數(shù)如果讀取成功:將字符整形提升為整形返回
失?。悍祷谽OF
文件指針——FILE * stream
輸出字符函數(shù)——fputc 返回類型int
函數(shù)參數(shù)如果讀取成功:將字符整形提升為整形返回
失?。悍祷谽OF
文件指針——FILE * stream
2.輸入輸出字符串輸入字符函數(shù)——fgets?1. 輸入輸出字符函數(shù)適用于所有的流
返回類型讀取時(shí)會(huì)為\0留一個(gè)字節(jié)的位置,所以想要讀取的字符數(shù)與實(shí)際要讀的少一
char*
函數(shù)參數(shù)讀取成功:返回str——與要存入字符數(shù)組的首元素的地址保持一致(不管讀取多少個(gè)字節(jié))。
讀取失?。悍祷乜罩羔?/p>
輸出字符函數(shù)——fputs1.要讀取的字符串的首地址——char*str
2.要讀取的字符的個(gè)數(shù)
3.文件指針——FILE * stream
返回類型功能:將文件中的信息寫(xiě)到程序中
字符串的\0是不會(huì)被放在文件里面的
換行不會(huì)自動(dòng)換行需要自己寫(xiě)
int
函數(shù)參數(shù)如果讀取成功:返回非負(fù)值
失?。悍祷谽OF
3.格式化輸入輸出 格式化輸入——fscanf1.要讀取的字符串的首元素的地址——const char *str
2.目標(biāo)文件指針——FILE * stream
返回類型(空白符:指空格符、制表符、回車(chē)符)就停止的輸入函數(shù)
一般來(lái)說(shuō):使用gets函數(shù)來(lái)彌補(bǔ)這一缺陷
int
函數(shù)參數(shù)成功:返回字符個(gè)數(shù)
比如:int ret = fscanf(pf, "%s “, arr);這里的ret 是 1跟字符串”"里面的字符個(gè)數(shù)有關(guān)
失?。悍祷谽OF
格式化輸出——fprintf1.要讀取的文件指針:FILE*stream
2.格式化字符串
3.輸入列表
功能:將數(shù)據(jù)轉(zhuǎn)換成字符串存到文件中
返回類型int
函數(shù)參數(shù)成功:返回讀取字符個(gè)數(shù)
比如:int ret = fscanf(pf, "%s “, arr);這里的ret 是 1跟字符串”"里面的字符個(gè)數(shù)有關(guān)
失敗:返回負(fù)數(shù)
4.二進(jìn)制輸入輸出1.要寫(xiě)入的文件指針:FILE*stream
2.格式化字符串
3.輸入列表
二進(jìn)制輸入——fwrite只能適用于文件流中
功能:將數(shù)據(jù)轉(zhuǎn)換成二進(jìn)制寫(xiě)入文件中
返回類型size_t
函數(shù)參數(shù)如果返回成功:返回的是成功寫(xiě)入的元素的個(gè)數(shù)
失?。悍祷?
一般來(lái)說(shuō):字符的二進(jìn)制數(shù)據(jù)和文本數(shù)據(jù)是相同的,所以在文檔中可以看懂字符,但是其它的數(shù)據(jù)可就不一定。
二進(jìn)制輸入——fread1.寫(xiě)入文件的數(shù)據(jù)的地址——const void * ptr
2.寫(xiě)入數(shù)據(jù)的大小——size_t size
3.要寫(xiě)入的數(shù)據(jù)的個(gè)數(shù)——size_t count
4.寫(xiě)入的文件指針——FILE * stream
功能:將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成相應(yīng)格式到內(nèi)存中。
返回類型size_t
函數(shù)參數(shù)如果返回成功:返回的是成功寫(xiě)入的元素的個(gè)數(shù)
失敗:返回0
一般來(lái)說(shuō):字符的二進(jìn)制數(shù)據(jù)和文本數(shù)據(jù)是相同的,所以在文檔中可以看懂字符,但是其它的數(shù)據(jù)可就不一定。
3.隨機(jī)讀寫(xiě) 1.fseek1.讀取文件的數(shù)據(jù)的地址——const void * ptr
2.讀取數(shù)據(jù)的大小——size_t size
3.要讀取的數(shù)據(jù)的個(gè)數(shù)——size_t count
4.讀取的文件指針——FILE * stream
功能:根據(jù)文件指針的位置和偏移量來(lái)定位文件指針
返回類型int
參數(shù)成功返回0
失敗返回非0值
2.ftell1.要讀取的文件指針——FILE * stream
2.偏移的大小(左負(fù)右正)——long int offset
3.偏移的起點(diǎn)——int origin偏移的起點(diǎn):
1.“ SEEK_CUR ”:表示文件指針當(dāng)前位置;
2.“ SEEK_END ”:表示文件末尾的位置;
3. “ SEEK_SET”:表示文件開(kāi)始位置。
功能:返回文件指針相對(duì)于起始位置的偏移量
返回類型long int
函數(shù)參數(shù)返回成功:當(dāng)前位置的偏移量
返回失?。?1L這是long int的-1
文件指針——FILE * stream
3.rewind功能:讓文件指針的位置回到文件的起始位置
返回類型void
函數(shù)參數(shù)文件指針——FILE * stream
4.錯(cuò)誤函數(shù) 1.ferror功能:檢查是否在讀寫(xiě)過(guò)程中出錯(cuò)
返回類型int
函數(shù)參數(shù)如果有錯(cuò)返回0
如果沒(méi)錯(cuò)返回非0值
文件指針——FILE * stream
2.feof功能:檢查是否因讀取到文件結(jié)束標(biāo)志而出錯(cuò)
返回類型int
函數(shù)參數(shù)如果有錯(cuò)返回0
如果沒(méi)錯(cuò)返回非0值
文件指針——FILE * stream
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧