




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
C文件的基本知識C語言程序設計文件把輸入和輸出的數(shù)據(jù)以文件的形式保存在計算機的外存儲器上,可以確保數(shù)據(jù)能隨時使用,避免反復輸入和讀取數(shù)據(jù)。文件是指一組相關數(shù)據(jù)的有序集合。文件是存儲數(shù)據(jù)的基本單位,可以通過讀取文件訪問數(shù)據(jù)。分類
可以按照不同角度對文件進行分類:按存儲介質(zhì)不同可以分為磁盤文件、磁帶文件、打印文件等。按存儲內(nèi)容不同可以分為程序文件和數(shù)據(jù)文件。按訪問方式不同可以分為順序文件、隨機文件和二進制文件。按用戶不同可以分為普通文件和設備文件。1.從用戶角度劃分普通文件存儲在磁盤或其他外部介質(zhì)上的一個有序數(shù)據(jù)集合,如程序文件、數(shù)據(jù)文件等。設備文件將與主機相連的外部設備作為文件對待,把通過它們而進行的輸入、輸出等同于磁盤的讀寫操作。三個標準設備文件:標準輸入文件(鍵盤)、標準輸出文件(顯示器)和標準錯誤信息文件(通常為顯示器)。1.從文件編碼方式劃分ASCII文件以字符形式順序保存每個字符的ASCII碼值。二進制文件以二進制編碼形式保存各數(shù)據(jù),與數(shù)據(jù)在內(nèi)存中的存儲形式完全一致。例如:整數(shù)1234保存為ASCII文件(4個字節(jié)):00110001001100100011001100110100;保存為二進制文件為(2個字節(jié)):0000010011010010。1.從文件編碼方式劃分
例如:短整數(shù)968(0000001111001000B):如果按ASCII碼的形式輸出則占3個字節(jié)(每個字符占1個字節(jié))而按二進制形式輸出,則在磁盤上占2個字節(jié)。C語言文件分類C語言版本不同,對文件的處理方式也各有不同,主要有兩種方法:一種是“緩沖文件系統(tǒng)”01一種是“非緩沖文件系統(tǒng)”02文件名D:\CC\temp\file1.dat
↓↓↓文件路徑文件主干名文件后綴一個文件要有一個唯一的文件標識,以便用戶識別和引用。文件標識包括3部分:(1)文件路徑;(2)文件名主干;(3)文件后綴。文件路徑表示文件在外部存儲設備中的位置。文件名主干的命名規(guī)則遵循標識符的命名規(guī)則。文件后綴用來表示文件的性質(zhì)。為方便起見,文件標識常被稱為文件名,但應了解此時所稱的文件名,實際上包括以上3部分內(nèi)容,而不僅是文件名主干。根據(jù)數(shù)據(jù)的組織形式,數(shù)據(jù)文件可分為ASCII文件和二進制文件。數(shù)據(jù)在內(nèi)存中是以二進制形式存儲的,如果不加轉(zhuǎn)換地輸出到外存,就是二進制文件,可以認為它就是存儲在內(nèi)存的數(shù)據(jù)的映像,所以也稱之為映像文件(imagefile)。如果要求在外存上以ASCII代碼形式存儲,則需要在存儲前進行轉(zhuǎn)換。ASCII文件又稱文本文件(textfile),每一個字節(jié)存放一個字符的ASCII代碼。字符一律以ASCII形式存儲,數(shù)值型數(shù)據(jù)既可以用ASCII形式存儲,也可以用二進制形式存儲。用ASCII碼形式輸出時字節(jié)與字符一一對應,一個字節(jié)代表一個字符,因而便于對字符進行逐個處理,也便于輸出字符。但一般占存儲空間較多,而且要花費轉(zhuǎn)換時間(二進制形式與ASCII碼間的轉(zhuǎn)換)。用二進制形式輸出數(shù)值,可以節(jié)省外存空間和轉(zhuǎn)換時間,把內(nèi)存中的存儲單元中的內(nèi)容原封不動地輸出到磁盤(或其他外部介質(zhì))上,此時每一個字節(jié)并不一定代表一個字符。文件的分類ASCII形式0011000100110000001100000011000000110000內(nèi)存中存儲形式(1)(0)(0)(0)(0)00000000000000000010011100010000二進制形式00000000000000000010011100010000ANSIC標準采用“緩沖文件系統(tǒng)”處理數(shù)據(jù)文件,所謂緩沖文件系統(tǒng)是指系統(tǒng)自動地在內(nèi)存區(qū)為程序中每一個正在使用的文件開辟一個文件緩沖區(qū)。從內(nèi)存向磁盤輸出數(shù)據(jù)必須先送到內(nèi)存中的緩沖區(qū),裝滿緩沖區(qū)后才一起送到磁盤去。如果從磁盤向計算機讀入數(shù)據(jù),則一次從磁盤文件將一批數(shù)據(jù)輸入到內(nèi)存緩沖區(qū)(充滿緩沖區(qū)),然后再從緩沖區(qū)逐個地將數(shù)據(jù)送到程序數(shù)據(jù)區(qū)(給程序變量)。這樣做是為了節(jié)省存取時間,提高效率,緩沖區(qū)的大小由各個具體的C編譯系統(tǒng)確定。說明:每一個文件在內(nèi)存中只有一個緩沖區(qū),在向文件輸出數(shù)據(jù)時,它就作為輸出緩沖區(qū),在從文件輸入數(shù)據(jù)時,它就作為輸入緩沖區(qū)。文件緩沖區(qū)輸出文件緩沖區(qū)
程序數(shù)據(jù)區(qū)輸入文件緩沖區(qū)
磁盤輸出輸入輸出輸入文件類型指針緩沖文件系統(tǒng)中,關鍵的概念是“文件類型指針”,簡稱“文件指針”。每個被使用的文件都在內(nèi)存中開辟一個相應的文件信息區(qū),用來存放文件的有關信息(如文件的名字、文件狀態(tài)及文件當前位置等)。這些信息是保存在一個結(jié)構(gòu)體變量中的。該結(jié)構(gòu)體類型是由系統(tǒng)聲明的,取名為FILE。typedefstruct{ shortlevel; //緩沖區(qū)“滿”或“空”的程度
unsignedflags; //文件狀態(tài)標志
charfd; //文件描述符
unsignedcharhold; //如緩沖區(qū)無內(nèi)容不讀取字符
shortbsize; //緩沖區(qū)的大小
unsignedchar*buffer; //數(shù)據(jù)緩沖區(qū)的位置
unsignedchar*curp; //文件位置標記指針當前的指向
unsignedistemp; //臨時文件指示器
shorttoken; //用于有效性檢查}FILE;一種C編譯環(huán)境提供的stdio.h頭文件中有以下的文件類型聲明文件類型指針FILE*fp;//定義一個指向FILE類型數(shù)據(jù)的指針變量可以使fp指向某一個文件的文件信息區(qū)(是一個結(jié)構(gòu)體變量),通過該文件信息區(qū)中的信息就能夠訪問該文件。也就是說,通過文件指針變量能夠找到與它關聯(lián)的文件。如果有n個文件,應設n個指針變量,分別指向n個FILE類型變量,以實現(xiàn)對n個文件的訪問。為方便起見,通常將這種指向文件信息區(qū)的指針變量簡稱為指向文件的指針變量。fp1文件f1的文件信息區(qū)fp2文件f2的文件信息區(qū)fp3文件f3的文件信息區(qū)注意指向文件的指針變量并不是指向外部介質(zhì)上的數(shù)據(jù)文件的開頭,而是指向內(nèi)存中的文件信息區(qū)的開頭。感謝觀看文件的打開與關閉C語言程序設計文件的打開與關閉
C語言中文件操作一般包括三個步驟:01用fopen函數(shù)打開文件02進行讀寫操作03用fclose函數(shù)關閉文件打開與關閉文件對文件讀寫之前應該“打開”該文件,在使用結(jié)束之后應“關閉”該文件。所謂“打開”是指為文件建立相應的信息區(qū)(用來存放有關文件的信息)和文件緩沖區(qū)(用來暫時存放輸入輸出的數(shù)據(jù))。在編寫程序時,在打開文件的同時,一般都指定一個指針變量指向該文件,也就是建立起指針變量與文件之間的聯(lián)系,這樣,就可以通過該指針變量對文件進行讀寫了。所謂“關閉”是指撤銷文件信息區(qū)和文件緩沖區(qū),使文件指針變量不再指向該文件,顯然就無法進行對文件的讀寫了。fopen函數(shù)fopen函數(shù)用于打開文件,并把結(jié)果賦給FILE指針變量,它的一般形式為:“文件名”是要打開的文件名,可以是完整的文件路徑FILE*fp;//fp是一個指向FILE結(jié)構(gòu)體類型的指針變量fp=fopen("file_data.txt","r");//以只讀方式打開文件file_data.txtfopen(文件名,文件打開方式);Fp為文件指針,每一個打開的文件必須對應一個單獨的文件指針變量。“文件名”為要打開的文件的名字,通常為字符串形式,可以包括文件路徑?!拔募褂梅绞健敝付ㄎ募念愋停ㄎ谋疚募蚨M制文件)和打開后的操作方式(讀、寫、追加)。fopen函數(shù)說明:r:只讀,用于向程序輸入數(shù)據(jù),要求文件已經(jīng)存在,若文件不存在則返回空指針NULL。w:只寫,用于向文件輸出數(shù)據(jù)。若文件已經(jīng)存在則將文件刪除,否則創(chuàng)建新的空文件。a:追加,用于向已存在的文件追加數(shù)據(jù)。若文件不存在,則提示出錯。文本文件:r,w,a,r+,w+,a+二進制文件:rb,wb,ab,rb+,wb+,ab+“文件使用方式”包括:含義為:用fopen函數(shù)打開數(shù)據(jù)文件
fopen(文件名,使用文件方式);使用文件方式文件使用方式含義如果指定的文件不存在“r”(只讀)為了輸入數(shù)據(jù),打開一個已存在的文本文件出錯“w”(只寫)為了輸出數(shù)據(jù),打開一個文本文件建立新文件“a”(追加)向文本文件尾添加數(shù)據(jù)出錯“rb”(只讀)為了輸入數(shù)據(jù),打開一個二進制文件出錯“wb”(只寫)為了輸出數(shù)據(jù),打開一個二進制文件建立新文件“ab”(追加)向二進制文件尾添加數(shù)據(jù)出錯“r+”(讀寫)為了讀和寫,打開一個文本文件出錯“w+”(讀寫)為了讀和寫,建立一個新的文本文件建立新文件“a+”(讀寫)為了讀和寫,打開一個文本文件出錯“rb+”(讀寫)為了讀和寫,打開一個二進制文件出錯“wb+”(讀寫)為了讀和寫,建立一個新的二進制文件建立新文件“ab+”(讀寫)為讀寫打開一個二進制文件出錯用fopen函數(shù)打開數(shù)據(jù)文件(1)用“r”方式打開的文件只能用于向計算機輸入而不能用作向該文件輸出數(shù)據(jù),而且該文件應該已經(jīng)存在,并存有數(shù)據(jù),這樣程序才能從文件中讀數(shù)據(jù)。不能用“r”方式打開一個并不存在的文件,否則出錯。(2)用“w”方式打開的文件只能用于向該文件寫數(shù)據(jù)(即輸出文件),而不能用來向計算機輸入。如果原來不存在該文件,則在打開文件前新建立一個以指定的名字命名的文件。如果原來已存在一個以該文件名命名的文件,則在打開文件前先將該文件刪去,然后重新建立一個新文件。(3)如果希望向文件末尾添加新的數(shù)據(jù)(不希望刪除原有數(shù)據(jù)),則應該用“a”方式打開。但此時應保證該文件已存在;否則將得到出錯信息。在每個數(shù)據(jù)文件中自動設置了一個隱式的“文件讀寫位置標記”,它指向的位置就是當前進行讀寫的位置。如果“文件讀寫位置標記”在文件開頭,則下一次的讀寫就是文件開頭的數(shù)據(jù)。然后“文件讀寫位置標記”自動移到下一個讀寫位置,以便讀寫下一個數(shù)據(jù)。以添加方式打開文件時,文件讀寫位置標記移到文件末尾。(4)用“r+”“w+”“a+”方式打開的文件既可用來輸入數(shù)據(jù),也可用來輸出數(shù)據(jù)。
fopen(文件名,使用文件方式);用fopen函數(shù)打開數(shù)據(jù)文件if((fp=fopen(″file1″,″r″))==NULL){ printf(″cannotopenthisfile\n″); exit(0);}打開一個文件的常用方法
fopen(文件名,使用文件方式);(5)如果不能實現(xiàn)“打開”的任務,fopen函數(shù)將會帶回一個空指針值NULL。(6)C標準建議用表10.1列出的文件使用方式打開文本文件或二進制文件,但目前使用的有些C編譯系統(tǒng)可能不完全提供所有這些功能,需要注意所用系統(tǒng)的規(guī)定。(7)有12種文件使用方式,其中有6種是在第一個字母后面加了字母b的(如rb,wb,ab,rb+,wb+,ab+),b表示二進制方式。其實,帶b和不帶b只有一個區(qū)別,即對換行的處理。由于在C語言用一個′\n′即可實現(xiàn)換行,而在Windows系統(tǒng)中為實現(xiàn)換行必須要用“回車”和“換行”兩個字符,即′\r′和′\n′。因此,如果使用的是文本文件并且用“w”方式打開,在向文件輸出時,遇到換行符′\n′時,系統(tǒng)就把它轉(zhuǎn)換為′\r′和′\n′兩個字符,否則在Windows系統(tǒng)中查看文件時,各行連成一片,無法閱讀。同樣,如果有文本文件且用“r”方式打開,從文件讀入時,遇到′\r′和′\n′兩個連續(xù)的字符,就把它們轉(zhuǎn)換為′\n′一個字符。如果使用的是二進制文件,在向文件讀寫時,不需要這種轉(zhuǎn)換。加b表示使用的是二進制文件,系統(tǒng)就不進行轉(zhuǎn)換。用fopen函數(shù)打開數(shù)據(jù)文件
fopen(文件名,使用文件方式);(8)如果用“wb”的文件使用方式,并不意味著在文件輸出時把內(nèi)存中按ASCII形式保存的數(shù)據(jù)自動轉(zhuǎn)換成二進制形式存儲。輸出的數(shù)據(jù)形式是由程序中采用什么讀寫語句決定的。例如,用fscanf和fprintf函數(shù)是按ASCII方式進行輸入輸出,而fread和fwrite函數(shù)是按二進制進行輸入輸出。(9)程序中可以使用3個標準的流文件——標準輸入流、標準輸出流和標準出錯輸出流。系統(tǒng)已對這3個文件指定了與終端的對應關系。標準輸入流是從終端的輸入,標準輸出流是向終端的輸出,標準出錯輸出流是當程序出錯時將出錯信息發(fā)送到終端。程序開始運行時系統(tǒng)自動打開這3個標準流文件。對fopen函數(shù)的補充說明:用fopen函數(shù)打開數(shù)據(jù)文件
例如:要以只寫方式打開當前目錄下的文本文件result.txt,可采用如下形式:FILE*fp;Fp=fopen(“result.txt”,”w”);01文件打開成功02文件打開失敗fopen函數(shù)fopen函數(shù),會由于無法打開指定文件而出現(xiàn)錯誤。如果出錯,fopen函數(shù)會返回一個空指針值NULL(NULL在stdio.h中被定義為0)。FILE*fp;if((fp=fopen("file_data.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 承包商入廠安全培訓試題有完整答案
- 公司項目部負責人安全培訓考試題附參考答案【培優(yōu)】
- 小學三年級安全教育與應急演練計劃
- 新外研版五年級英語教師培訓計劃
- 小學科學實驗教學方法研究計劃
- 模具開發(fā)階段的驗收流程
- 中小學語文期中復習計劃的有效策略
- 本地網(wǎng)傳輸系統(tǒng)項目風險評估報告
- 污水處理廠安全生產(chǎn)應急措施
- 家庭護理患者安全指導范文
- 2025年山西省長治市部分學校中考一模語文試卷(含解析)
- 西安特教面試試題及答案
- 2025年中考道德與法治必背知識總結(jié)(按主題分類)
- 2025年涂裝工藝考試試題及答案
- 2025年糧食、棉花、化肥等農(nóng)產(chǎn)品倉儲服務項目可行性研究報告
- DeepSeek在金融服務中的創(chuàng)新應用
- DBJ04T 467-2023 建筑防煙排煙系統(tǒng)技術標準
- 生物反饋療法在盆底失弛緩型便秘中的研究進展
- 2025年全國臺聯(lián)機關服務中心招聘事業(yè)編制人員歷年高頻重點提升(共500題)附帶答案詳解
- 2024-2030年全球及中國近紅外熒光成像系統(tǒng)行業(yè)運行模式及未來應用前景報告
- 成立工作專班的通知怎么寫-成立工作專班的通知
評論
0/150
提交評論