(2024年)C語言程序設(shè)計(jì)教程第10章_第1頁
(2024年)C語言程序設(shè)計(jì)教程第10章_第2頁
(2024年)C語言程序設(shè)計(jì)教程第10章_第3頁
(2024年)C語言程序設(shè)計(jì)教程第10章_第4頁
(2024年)C語言程序設(shè)計(jì)教程第10章_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

C語言程序設(shè)計(jì)教程第10章12024/3/26目錄文件操作基礎(chǔ)順序讀寫文件隨機(jī)讀寫文件錯(cuò)誤處理與文件保護(hù)文件操作綜合應(yīng)用實(shí)例本章小結(jié)與練習(xí)題22024/3/26文件操作基礎(chǔ)0132024/3/26文件是存儲在外部介質(zhì)上的數(shù)據(jù)集合,通常以文件名進(jìn)行標(biāo)識。文件概念根據(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`中,并在末尾自動添加換行符。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)前文件位置指針相對于文件開頭的偏移量。用于將文件位置指針重置到文件開頭。其函數(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為指向存儲數(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ò)誤、缺少分號等。處理方法通常是仔細(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)都無法檢測。處理方法是通過仔細(xì)分析和測試程序,找出并修正邏輯錯(cuò)誤。邏輯錯(cuò)誤錯(cuò)誤類型及處理方法152024/3/26文件保護(hù)機(jī)制簡介文件訪問權(quán)限通過設(shè)置文件的訪問權(quán)限,可以控制哪些用戶或程序可以讀取、寫入或執(zhí)行文件。這是保護(hù)文件不被未經(jīng)授權(quán)訪問的有效手段。文件加密對重要文件進(jìn)行加密,可以確保即使文件被非法獲取,也無法輕易解密和訪問文件內(nèi)容。文件備份與恢復(fù)定期備份文件可以在文件損壞或丟失時(shí)及時(shí)恢復(fù),減少損失。同時(shí),備份文件也可以用于歷史版本回溯和數(shù)據(jù)分析等場景。文件審計(jì)與監(jiān)控通過對文件的訪問和使用進(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ù)組來存儲學(xué)生信息,每個(gè)學(xué)生信息包括學(xué)號、姓名、性別、年齡、成績等字段。文件操作規(guī)劃03使用文件來保存學(xué)生信息,實(shí)現(xiàn)數(shù)據(jù)的持久化存儲。在程序啟動時(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ò)誤處理如何檢測和處理文件操作中的錯(cuò)誤,例如使用`ferror()`和`clearerr()`函數(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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論