




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C語言程序設(shè)計(jì)教程第10章12024/3/26目錄文件操作基礎(chǔ)順序讀寫文件隨機(jī)讀寫文件錯(cuò)誤處理與文件保護(hù)文件操作綜合應(yīng)用實(shí)例本章小結(jié)與練習(xí)題22024/3/26文件操作基礎(chǔ)0132024/3/26文件是存儲(chǔ)在外部介質(zhì)上的數(shù)據(jù)集合,通常以文件名進(jìn)行標(biāo)識(shí)。文件概念根據(jù)數(shù)據(jù)的組織形式和處理方式,文件可分為文本文件和二進(jìn)制文件。文件分類文件概念及分類42024/3/26文件指針與文件操作函數(shù)文件指針在C語言中,文件操作通過文件指針進(jìn)行,它是一個(gè)指向文件的指針變量,用于訪問文件中的數(shù)據(jù)。文件操作函數(shù)C語言提供了一系列文件操作函數(shù),如fopen、fclose、fread、fwrite等,用于實(shí)現(xiàn)文件的打開、關(guān)閉、讀寫等操作。52024/3/26使用fopen函數(shù)打開文件,需要指定文件名和打開模式(如讀取模式、寫入模式等)。使用fclose函數(shù)關(guān)閉文件,釋放相關(guān)資源。在文件使用完畢后,應(yīng)及時(shí)關(guān)閉文件以避免資源泄漏。文件打開與關(guān)閉文件關(guān)閉文件打開62024/3/26順序讀寫文件0272024/3/26從指定的文件流中讀取一個(gè)字符。fgetc從標(biāo)準(zhǔn)輸入流`stdin`中讀取一個(gè)字符。getchar將指定的字符寫入到指定的文件流中。fputc將指定的字符寫入到標(biāo)準(zhǔn)輸出流`stdout`中。putchar字符讀寫函數(shù)82024/3/2601020304從指定的文件流中讀取一行字符串。fgets將指定的字符串寫入到指定的文件流中。fputs從標(biāo)準(zhǔn)輸入流`stdin`中讀取一行字符串(該函數(shù)已被棄用,建議使用`fgets`)。gets將指定的字符串寫入到標(biāo)準(zhǔn)輸出流`stdout`中,并在末尾自動(dòng)添加換行符。puts字符串讀寫函數(shù)92024/3/26fread從指定的文件流中讀取指定大小的數(shù)據(jù)塊。fwrite將指定的數(shù)據(jù)塊寫入到指定的文件流中。read從文件描述符中讀取指定大小的數(shù)據(jù)塊(需要包含頭文件`<unistd.h>`)。write將指定的數(shù)據(jù)塊寫入到文件描述符中(需要包含頭文件`<unistd.h>`)。數(shù)據(jù)塊讀寫函數(shù)102024/3/26隨機(jī)讀寫文件03112024/3/26fseek()函數(shù)用于在文件中定位到指定位置。其函數(shù)原型為`intfseek(FILE*stream,longoffset,intwhence);`,其中`stream`為文件指針,`offset`為偏移量,`whence`指定起始位置(`SEEK_SET`表示文件開頭,`SEEK_CUR`表示當(dāng)前位置,`SEEK_END`表示文件末尾)。用于返回當(dāng)前文件位置指針。其函數(shù)原型為`longftell(FILE*stream);`,返回值為當(dāng)前文件位置指針相對(duì)于文件開頭的偏移量。用于將文件位置指針重置到文件開頭。其函數(shù)原型為`voidrewind(FILE*stream);`。ftell()函數(shù)rewind()函數(shù)定位文件位置函數(shù)122024/3/26隨機(jī)讀寫函數(shù)應(yīng)用示例fread()函數(shù):用于從文件中讀取數(shù)據(jù)。其函數(shù)原型為size_tfread(void*ptr,size_tsize,size_tcount,FILE*stream);,其中ptr為指向存儲(chǔ)數(shù)據(jù)的緩沖區(qū)的指針,size為要讀取的每個(gè)數(shù)據(jù)項(xiàng)的大小(以字節(jié)為單位),count為要讀取的數(shù)據(jù)項(xiàng)的數(shù)量,stream為文件指針。fwrite()函數(shù):用于向文件中寫入數(shù)據(jù)。其函數(shù)原型為size_tfwrite(constvoid*ptr,size_tsize,size_tcount,FILE*stream);,其中參數(shù)含義與fread()函數(shù)相同。fgetc()和fputc()函數(shù):分別用于從文件中讀取一個(gè)字符和向文件中寫入一個(gè)字符。其函數(shù)原型分別為intfgetc(FILE*stream);和intfputc(intc,FILE*stream);。fgets()和fputs()函數(shù):分別用于從文件中讀取一行字符串和向文件中寫入一行字符串。其函數(shù)原型分別為char*fgets(char*str,intn,FILE*stream);和intfputs(constchar*str,FILE*stream);。132024/3/26錯(cuò)誤處理與文件保護(hù)04142024/3/26010203這類錯(cuò)誤在編譯時(shí)就能被發(fā)現(xiàn),如拼寫錯(cuò)誤、缺少分號(hào)等。處理方法通常是仔細(xì)閱讀編譯器給出的錯(cuò)誤信息,定位并修正錯(cuò)誤。語法錯(cuò)誤這類錯(cuò)誤在程序運(yùn)行時(shí)發(fā)生,如空指針引用、數(shù)組越界等。處理方法包括使用調(diào)試工具定位錯(cuò)誤,以及通過異常處理機(jī)制捕獲并處理錯(cuò)誤。運(yùn)行時(shí)錯(cuò)誤這類錯(cuò)誤通常是由于算法設(shè)計(jì)或邏輯判斷錯(cuò)誤導(dǎo)致的,編譯器和運(yùn)行時(shí)系統(tǒng)都無法檢測(cè)。處理方法是通過仔細(xì)分析和測(cè)試程序,找出并修正邏輯錯(cuò)誤。邏輯錯(cuò)誤錯(cuò)誤類型及處理方法152024/3/26文件保護(hù)機(jī)制簡(jiǎn)介文件訪問權(quán)限通過設(shè)置文件的訪問權(quán)限,可以控制哪些用戶或程序可以讀取、寫入或執(zhí)行文件。這是保護(hù)文件不被未經(jīng)授權(quán)訪問的有效手段。文件加密對(duì)重要文件進(jìn)行加密,可以確保即使文件被非法獲取,也無法輕易解密和訪問文件內(nèi)容。文件備份與恢復(fù)定期備份文件可以在文件損壞或丟失時(shí)及時(shí)恢復(fù),減少損失。同時(shí),備份文件也可以用于歷史版本回溯和數(shù)據(jù)分析等場(chǎng)景。文件審計(jì)與監(jiān)控通過對(duì)文件的訪問和使用進(jìn)行審計(jì)和監(jiān)控,可以及時(shí)發(fā)現(xiàn)和處理未經(jīng)授權(quán)的訪問和惡意修改行為,保障文件安全。162024/3/26文件操作綜合應(yīng)用實(shí)例05172024/3/26系統(tǒng)功能需求01學(xué)生信息管理系統(tǒng)需要實(shí)現(xiàn)學(xué)生信息的錄入、查詢、修改和刪除等功能。數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)02采用結(jié)構(gòu)體數(shù)組來存儲(chǔ)學(xué)生信息,每個(gè)學(xué)生信息包括學(xué)號(hào)、姓名、性別、年齡、成績(jī)等字段。文件操作規(guī)劃03使用文件來保存學(xué)生信息,實(shí)現(xiàn)數(shù)據(jù)的持久化存儲(chǔ)。在程序啟動(dòng)時(shí),從文件中讀取數(shù)據(jù)到內(nèi)存中,程序關(guān)閉時(shí),將內(nèi)存中的數(shù)據(jù)寫回到文件中。學(xué)生信息管理系統(tǒng)設(shè)計(jì)思路182024/3/26學(xué)生信息結(jié)構(gòu)體定義關(guān)鍵代碼實(shí)現(xiàn)及解析192024/3/2601```c02typedefstruct{03charid[20];關(guān)鍵代碼實(shí)現(xiàn)及解析202024/3/26charname[50];chargender;關(guān)鍵代碼實(shí)現(xiàn)及解析212024/3/26intage;}Student;floatscore;關(guān)鍵代碼實(shí)現(xiàn)及解析222024/3/26```從文件中讀取學(xué)生信息關(guān)鍵代碼實(shí)現(xiàn)及解析232024/3/26關(guān)鍵代碼實(shí)現(xiàn)及解析01```c02voidloadStudents(Studentstudents[],int*count){FILE*fp=fopen("students.txt","r");03242024/3/26if(fp==NULL){關(guān)鍵代碼實(shí)現(xiàn)及解析252024/3/26關(guān)鍵代碼實(shí)現(xiàn)及解析*count=0;262024/3/26關(guān)鍵代碼實(shí)現(xiàn)及解析272024/3/26VS}while(fscanf(fp,"%s%s%c%d%f",students[*count].id,students[*count].name,&students[*count].gender,&students[*count].age,&students[*count].score)!=EOF){關(guān)鍵代碼實(shí)現(xiàn)及解析282024/3/26關(guān)鍵代碼實(shí)現(xiàn)及解析(*count);292024/3/26關(guān)鍵代碼實(shí)現(xiàn)及解析}fclose(fp);302024/3/26關(guān)鍵代碼實(shí)現(xiàn)及解析010203```將學(xué)生信息寫入文件}312024/3/2603FILE*fp=fopen("students.txt","w");01```c02voidsaveStudents(Studentstudents[],intcount){關(guān)鍵代碼實(shí)現(xiàn)及解析322024/3/26if(fp==NULL){關(guān)鍵代碼實(shí)現(xiàn)及解析332024/3/26return;關(guān)鍵代碼實(shí)現(xiàn)及解析342024/3/26關(guān)鍵代碼實(shí)現(xiàn)及解析}for(inti=0;i<count;i){fprintf(fp,"%s%s%c%d%fn",students[i].id,students[i].name,students[i].gender,students[i].age,students[i].score);352024/3/26}fclose(fp);關(guān)鍵代碼實(shí)現(xiàn)及解析362024/3/26}```關(guān)鍵代碼實(shí)現(xiàn)及解析372024/3/26本章小結(jié)與練習(xí)題06382024/3/26文件I/O函數(shù)如`fopen()`,`fclose()`,`fscanf()`,`fprintf()`,`fgets()`,`fputs()`等函數(shù)的使用方法和注意事項(xiàng)。文件操作包括文件的打開、關(guān)閉、讀取、寫入等基本操作,以及文件指針的使用。文件定位通過`fseek()`,`rewind()`,`ftell()`等函數(shù)實(shí)現(xiàn)文件內(nèi)部的定位。二進(jìn)制文件操作與文本文件的區(qū)別,以及如何使用`fread()`和`fwrite()`函數(shù)進(jìn)行二進(jìn)制文件的讀寫。錯(cuò)誤處理如何檢測(cè)和處理文件操作中的錯(cuò)誤,例如使用`ferror()`和`clearerr()`函數(shù)。本章知識(shí)點(diǎn)回顧392024/3/261.題目編寫一個(gè)程序,從鍵盤輸入一段文本,并將其保存到一個(gè)文件中。要點(diǎn)一要點(diǎn)二答案解析首先需要使用`fopen()`函數(shù)以寫入模式打開一個(gè)文件,然后使用`fgets()`或`scanf()`函數(shù)從鍵盤讀取輸入,并使用`fputs()`或`fprintf()`函數(shù)將輸入的內(nèi)容寫入到文件中,最后使用`fclose()`函數(shù)關(guān)閉文件。練習(xí)題及答案解析402024/3/26練習(xí)題及答案解析編寫一個(gè)程序,讀取一個(gè)文本文件的內(nèi)容,并將其輸出到屏幕上。2.題目首先需要使用`fopen()`函數(shù)以讀取模式打開一個(gè)文件,然后使用`fgets()`或`fscanf()`函數(shù)從文件中讀取內(nèi)容,并使用`printf()`函數(shù)將讀取的內(nèi)容輸出到屏幕上,最后使用`fclose()`函數(shù)關(guān)閉文件。答案解析412024/3/26編寫一個(gè)程序,實(shí)現(xiàn)兩個(gè)二進(jìn)制文件的合并。首先需要使用`fopen()`函數(shù)以讀取模式打開兩個(gè)二進(jìn)制文件,以寫入模式打開一個(gè)新的二進(jìn)制文件。然后使用`fread()`函數(shù)從兩個(gè)文件中讀取內(nèi)容,并使用`fwrite()`函數(shù)將讀取的內(nèi)容寫入到新文件中。最后使用`fclose()`函數(shù)關(guān)閉所有文件。3.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥品庫存abc管理辦法
- 董事、監(jiān)事委派管理辦法
- 虹口區(qū)廠房工程管理辦法
- 融資租賃企業(yè)監(jiān)督管理辦法
- 衢江區(qū)小額工程管理辦法
- 衡水公積金管理辦法細(xì)則
- 裕安區(qū)扶貧項(xiàng)目管理辦法
- 西安物業(yè)管理收費(fèi)管理辦法
- 視頻監(jiān)控室值守管理辦法
- 評(píng)標(biāo)專家評(píng)審期間管理暫行辦法
- 施工安全生產(chǎn)管理制度范本
- 藥店藥品培訓(xùn)知識(shí)課件下載
- 貴州省黔西南布依族苗族自治州興義市第八中學(xué)2025屆高一物理第二學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)試題含解析
- 初中語文新課程標(biāo)準(zhǔn)理論測(cè)試題及答案
- 2025年電信運(yùn)營商數(shù)字內(nèi)容業(yè)務(wù)發(fā)展機(jī)遇洞察-解碼運(yùn)營商在5G+AI時(shí)代的戰(zhàn)略布局與增長引擎
- 外耳道腫物的護(hù)理查房
- 學(xué)堂在線 生活英語進(jìn)階 期末考試答案
- 2025年醫(yī)生執(zhí)業(yè)資格考試題及答案
- 2025年廣東省中考生物試卷真題及答案詳解(精校打印版)
- 招商部安全生產(chǎn)職責(zé)
- 設(shè)備操作維護(hù)培訓(xùn)
評(píng)論
0/150
提交評(píng)論