溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

c語言可以處理的文件類型有哪些

發(fā)布時間:2022-09-19 16:01:53 來源:億速云 閱讀:438 作者:iii 欄目:互聯(lián)網(wǎng)科技

這篇文章主要介紹“c語言可以處理的文件類型有哪些”,在日常操作中,相信很多人在c語言可以處理的文件類型有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”c語言可以處理的文件類型有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

c語言可以處理的文件類型是:文本文件和二進制文件。C語言所能夠處理文件是按照存放形式分為文本文件和二進制文件:1、文本文件存儲的是一個ASCII碼,文件的內(nèi)容可以直接進行輸入輸出;2、二進制文件直接將字符存儲,不能將二進制文件的內(nèi)容直接輸出到屏幕上。

本教程操作環(huán)境:windows7系統(tǒng)、c99版本、Dell G3電腦。

在計算機中,對于輸入輸出均采用數(shù)據(jù)流的形式。文件按照存取方式分為順序存取文件和隨機存取文件。按照存儲形式分為二進制文件和文本文件。文本文件存儲的是一個ASCII碼,文件的內(nèi)容可以直接進行輸入輸出。二進制文件直接將字符存儲,不能將二進制文件的內(nèi)容直接輸出到屏幕上。所以,C語言所能夠處理文件是按照存放形式分為文本文件和二進制文件。

文本文件和二進制文件的區(qū)別

文本文件通常用來保存肉眼可見的字符,比如.txt文件、.c文件、.dat文件等,用文本編輯器打開這些文件,我們能夠順利看懂文件的內(nèi)容。

二進制文件通常用來保存視頻、圖片、程序等不可閱讀的內(nèi)容,用文本編輯器打開這些文件,會看到一堆亂碼,根本看不懂。

但是從物理上講,二進制文件和字符文件并沒有什么區(qū)別,它們都是以二進制的形式保存在磁盤上的數(shù)據(jù)。

我們之所以能看懂文本文件的內(nèi)容,是因為文本文件中采用的是 ASCII、UTF-8、GBK 等字符編碼,文本編輯器可以識別出這些編碼格式,并將編碼值轉(zhuǎn)換成字符展示出來。

而二進制文件使用的是 mp4、gif、exe 等特殊編碼格式,文本編輯器并不認識這些編碼格式,只能按照字符編碼格式胡亂解析,所以就成了一堆亂七八糟的字符,有的甚至都沒見過。

如果我們新建一個 mp4 文件,給它寫入一串字符,然后再用文本編輯器打開,你一樣可以讀得懂,有興趣的讀者可以自己試試。

總起來說,不同類型的文件有不同的編碼格式,必須使用對應(yīng)的程序(軟件)才能正確解析,否則就是一堆亂碼,或者無法使用。

對于編程人員,文本文件和二進制文件就是一個聲明,指明了你應(yīng)該以什么方式(文本方式/二進制)打開這個文件,用什么函數(shù)讀寫這個文件(讀寫函數(shù)),怎么判斷讀到這個文件結(jié)尾。

具體的說:

1。以哪種方式打開一個文件?

ANSI C規(guī)定了標準輸入輸出函數(shù)庫,用 fopen()函數(shù)打開文件。fopen()函數(shù)的調(diào)用方式一般為:

FILE *fp;
fp=fopen(文件名,使用文件方式);

使用文件方式見下表:

使用文件方式

含義

"r"(只讀)

為輸入打開一個文本文件

"w"(只寫)

為輸出打開一個文本文件

"a"(追加)

為追加打開一個文本文件

"rb"(只讀)

為輸入打開一個二進制文件

"wb"(只寫)

為輸出打開一個二進制文件

"ab"(追加)

為追加打開一個二進制文件

"r+"(讀寫)

為讀/寫打開一個文本文件

"w+"(讀寫)

為讀/寫創(chuàng)建一個文本文件

"a+"(讀寫)

為讀/寫打開一個文本文件

"rb+"(讀寫)

為讀/寫打開一個二進制文件

"wb+"(讀寫)

為讀/寫創(chuàng)建一個二進制文件

"ab+"(讀寫)

為讀/寫打開一個二進制文件

同一個文件從磁盤讀取文件到內(nèi)存(程序數(shù)據(jù)區(qū)或者緩存區(qū))時,兩種方式下,內(nèi)存中的內(nèi)容一般不相同,這就是兩種打開方式的實質(zhì)性差別。

這里要說一個背景,那就是在windows下,它會做一個處理,就是寫文件時,換行符會被轉(zhuǎn)換成回車,換行符存在磁盤文件上,而讀磁盤上的文件時,它又會進行逆處理,就是把文件中連續(xù)的回車,換行符轉(zhuǎn)換成換行符。

因此,在讀取一個磁盤文件時,文本方式讀取到文件內(nèi)容很有可能會比二進制文件短,因為文本方式讀取要把回車,換行兩個字符變成一個字符,相當于截短了文件。但是為什么僅僅是可能呢?因為可能文中中不存在連著的45,42這兩個字節(jié)(45是CR回車的ASCII碼,42是換行符CL的ASCII碼),也就不存在“截短”操作了,因此讀到的內(nèi)容是一樣的。

具體的來說,文件文件(以文本方式寫的),最好以文本方式讀。二進制文件(以二進制方式寫的),最好以二進制方式讀。不然可能會不正確。上面的已經(jīng)分析了。

2.以什么函數(shù)讀寫文件?

數(shù)據(jù)怎么在磁盤上寫不是由文件打開方式?jīng)Q定的,而是由寫函數(shù)決定的。數(shù)據(jù)怎么從磁盤上讀也不是由文件打開方式?jīng)Q定的,而是由讀函數(shù)決定的。

上面說的數(shù)據(jù)怎么寫是說指,一種類型的變量是怎么存的?比如int 12,可以直接存12的二進制碼(4個字節(jié)),也可以存字符1,字符2.

數(shù)據(jù)怎么讀的是指,我要讀一個int變量,是直接讀sizeof(int)個字節(jié),還是一個字符一個字符的讀,直到讀到的字符不是數(shù)字字符。

C里面有兩組文件讀寫函數(shù)恰好支持上面兩種方式的讀寫:

  • 1.fread(buffer,size,count,fp),fwrite(buffer,size,count,fp)。用來讀寫一個數(shù)據(jù)塊。它對應(yīng)的是第一種存儲方式。直接按類型的字節(jié)長度指定讀寫的字節(jié)數(shù)。

  • 2fprintf函數(shù)和fscanf函數(shù).它對應(yīng)的是第二種讀寫方式。即以字符的方式讀寫。(fprintf函數(shù)、fscanf函數(shù)與printf函數(shù)、scanf函數(shù)的作用相仿,都是格式化讀寫函數(shù)。fprintf和fscanf函數(shù)的讀寫對象是磁盤文件,而printf和scanf函數(shù)的讀寫對象是終端。)

它們的一般調(diào)用格式為:

fprintf(文件指針,格式字符串,輸出列表);

fscanf (文件指針,格式字符串,輸入列表);

3怎么判斷文件尾?

在 C語言,或更精確地說成 C標準函式庫中,有一個特別的字符EOF(stdio.h中這個定義 #define EOF (-1) ),它表示:文件結(jié)束符(end of file)。在while循環(huán)中以EOF作為文件結(jié)束標志,這種以EOF作為文件結(jié)束標志的文件,必須是文本文件。在文本文件中,數(shù)據(jù)都是以字符的ASCII代碼值的形式存放。我們知道,ASCII代碼值的范圍是0~255,不可能出現(xiàn)-1,因此可以用EOF作為文件結(jié)束標志。

但是,C語言中,當把數(shù)據(jù)以二進制形式存放到文件中時,就會有-1值的出現(xiàn),此時不能采用EOF作為二進制文件的結(jié)束標志。為解決這個問題,ANSI C提供一個feof函數(shù),用來判斷文件是否結(jié)束。如果遇到文件結(jié)束,函數(shù)feof(fp)的值為1,否則為0.

feof函數(shù)既可用以判斷二進制文件是否結(jié)束,也可以用以判斷文本文件是否結(jié)束。但是要注意feof用以判斷文本文件尾時,如果代碼編寫不當,可能會把文本文中中的文件結(jié)束符EOF也讀取出來了;具體見http://baike.baidu.com/view/656648.htm

4.知道一個文件是文本文件,還是二進制文件,更多的“提醒”我們,應(yīng)該選擇哪種讀寫函數(shù)。

正如2所說的,數(shù)據(jù)怎么存不是由文件打開方式?jīng)Q定的,而是由讀寫函數(shù)決定的。

比如說,我們以二進制文件的方式打開一個文件(實際上只是指明了要進行換行符的轉(zhuǎn)換),它更多的是代表一種理念(虛的):我“希望”這個文件里面的數(shù)據(jù)是這樣的,int類型占4字節(jié),char占1個字節(jié)。這種模式下,我用fread(buffer,size0f(int),1,fp)讀取一個int到int變量中。

我們記住

我們在對一個文件進行操作以前,首先,我們要清楚這個文件到底是文本文件還是二進制文件。文件文件用文本方式打開,二進制文件用二進制方式打開

如果我們要操作一個二進制文件,那么我們就以二進制方式打開(理論上也可以以文件方式打開,但是如果寫的二進制數(shù)據(jù)里面有45時,會轉(zhuǎn)化成45,42存儲,見1.這是很有可能發(fā)生的)。同時讀寫的時候用fread,fwrite這兩個函數(shù)。

如果我要操作一個文本文件,那么我們就以文本的方式打開(理論上也可以以二進制方式打開,但是不保險)。同時讀寫的時候用讀寫字符的那些函數(shù)fprintf,fscanf ,fgetc,fputc,putw,getw,fgetc,fputs

到此,關(guān)于“c語言可以處理的文件類型有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI