版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C++面向?qū)ο蟪绦蛟O(shè)計(第二版)
主編曹靜中國水利水電出版社C++面向?qū)ο蟪绦蛟O(shè)計(第二版)
第八章數(shù)據(jù)流與文件的輸入/輸出18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計第八章數(shù)據(jù)流與文件的輸入/輸出8.1I/O流的概念8.2數(shù)據(jù)流的控制8.3文件的輸入/輸出項目設(shè)計7校園信息管理系統(tǒng)中的數(shù)據(jù)存儲18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計8.1I/O流的概念流是一種抽象,它負責(zé)在數(shù)據(jù)的生產(chǎn)者和數(shù)據(jù)的消費者之間建立聯(lián)系,并管理數(shù)據(jù)的流動。當(dāng)程序與外界環(huán)境進行信息交換時,存在著兩個對象,一個是程序中的對象,另一個是文件對象。程序建立一個流對象,并指定這個流對象與某個文件對象建立連接,程序操作流對象,流對象通過文件系統(tǒng)對所連接的文件對象產(chǎn)生作用。讀操作在流數(shù)據(jù)抽象中被稱為(從流中)提取,寫操作被稱為(向流中)插入。18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計8.2數(shù)據(jù)流的控制8.2.1數(shù)據(jù)流的格式控制8.2.2常用的輸入/輸出函數(shù)8.2.3數(shù)據(jù)流的錯誤偵測18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計8.2.1數(shù)據(jù)流的格式控制插入(<<)和提?。?gt;>)運算符是為所有標(biāo)準(zhǔn)C++數(shù)據(jù)類型定義的,其作用是向流中傳送和讀取數(shù)據(jù)。插入和提取運算符與預(yù)先定義的操作符一起工作,用來控制輸入和輸出格式。1.輸出寬度為了調(diào)整輸出時的顯示寬度,可以通過調(diào)用width成員函數(shù)為每個項(item)指定輸出寬度或在流中放入setw操縱符。18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計8.2.1數(shù)據(jù)流的格式控制2.對齊方式輸出流的默認對齊方式為文本右對齊,程序中可以用setiosflags和resetiosflags操作符重設(shè)對齊方式。3.精度使用setprecision操作符改變精度,該操作符有兩個標(biāo)志,ios::fixed和ios::scientific。4.進制可以用dec、oct和hex操縱符設(shè)置輸入和輸出的默認進制。18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計8.2.2常用的輸入/輸出函數(shù)常用istream成員函數(shù)包含:intistream::get()如果輸入流包括附加的數(shù)據(jù),函數(shù)取得并返回下一個字符;否則它返回EOF。istream&istream::get(char&c)如果輸入流包括附加的數(shù)據(jù),函數(shù)取得并將下一個字符分配給c;否則就是沒有定義對c的作用。返回一個對*this(調(diào)用對象)的引用。18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計8.2.2常用的輸入/輸出函數(shù)istream&istream::get(chars[],intn,chardelim='\n')從輸入流獲取字符并將它們分配給s直到下面的一個條件發(fā)生:取得n-1個字符,沒有輸入字符了,或者下一個接收的字符的值為delim。istream&istream::getline(chars[],intn,chardelim='\n')從輸入流獲取字符并將它們分配給s直到下面的一個條件發(fā)生:取得n-1個字符,沒有輸入字符了,或者下一個接收的字符的值為delim。18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計8.2.2常用的輸入/輸出函數(shù)intistream::peak()如果輸入流包括附加的數(shù)據(jù),函數(shù)返回下一個接收的字符;否則它返回EOF。istream&istream::unget(charc)字符c被送到輸入流。它將是下一個要接收的字符。函數(shù)返回一個對*this的引用。庫iostream還提供對ios成員函數(shù)的訪問,一些程序在輸入流中檢測文件尾。boolios::eof()如果流中達到文件尾則返回真;否則函數(shù)返回假。18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計8.2.2常用的輸入/輸出函數(shù)庫iostream還提供兩個類似get()和getline()的ostream成員函數(shù)。ostream&ostream::put(charc)將字符c插入輸入流中。函數(shù)返回一個對*this的引用。ostream&ostream::write(constchars[],intn)將s中的n個字符插入到輸入流中??兆址彩怯行У?。函數(shù)返回一個對*this的引用。庫iostream還提供常用的ostream成員函數(shù)。ostream&ostream::flush()強制任何沒有完成的操作符插入完成。函數(shù)返回一個對*this的引用。18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計8.2.3數(shù)據(jù)流的錯誤偵測流cerr和clog把顯示輸出到默認錯誤日志上,該日志通常是控制臺顯示器。對流cerr的每個插入請求應(yīng)該立即送出顯示。下面給出幾個錯誤消息的例子:cerr<<"系統(tǒng)將在10秒后重起!\n";cerr<<"輸入值無效,請重新輸入!\n";
18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計8.2.3數(shù)據(jù)流的錯誤偵測如果出于效率的緣故,則有必要緩沖錯誤和系統(tǒng)狀態(tài)消息,這樣就應(yīng)該使用帶緩沖的錯誤流clog。像cerr一樣,clog通常是定向到顯示器。下面給出幾個樣例:clog<<UserName<<"成功登陸!\n";clog<<"有新郵件!\n";18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計8.3文件的輸入/輸出8.3.1fstream類8.3.2格式化文字模式的文件I/O8.3.3二進制模式的文件I/O8.3.4文件指針的使用18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計8.3.1fstream類C++里負責(zé)文件輸入/輸出的類主要有ifstream(文件輸入)、ofstream(文件輸出)以及fstream(文件輸入/輸出)。所謂文件的I/O(輸入/輸出)是指以程序為主的角度而言,文件打開為輸入狀態(tài)時(in),表示程序?qū)⒂晌募x入數(shù)據(jù);文件打開為輸出狀態(tài)時(out),表示程序?qū)⑤敵鰯?shù)據(jù)至文件。我們通常將數(shù)據(jù)由文件輸入到程序稱之為讀取,程序?qū)?shù)據(jù)輸出到文件稱之為寫入。18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計8.3.1fstream類fstream類可以用于將數(shù)據(jù)寫入文件,或讀取文件的數(shù)據(jù)。要使用fstream類執(zhí)行文件的I/O時,首先必須先定義一個fstream類的對象。例如:fstreamfile;//定義一個fstream對象利用fstream所提供的open成員函數(shù),打開一個文件。傳入open函數(shù)的參數(shù)有兩個,一個傳入欲打開的磁盤文件的名稱,另一個傳入打開該文件的模式參數(shù)。file.open("MyFile.txt",ios::in);//在讀取模式下打開MyFile.txt文件18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計8.3.1fstream類表8-1文件流的文件打開模式模式參數(shù)
功
能ios::in文件打開為讀?。ㄝ斎耄顟B(tài),此為istream類的默認模式參數(shù)ios::out文件打開為寫入(輸出)狀態(tài),此為ostream類的默認模式參數(shù)ios::ate打開一個現(xiàn)存文件,從文件結(jié)尾處讀?。ㄝ斎耄┗?qū)懭耄ㄝ敵觯﹊os::app打開一個輸出文件從文件結(jié)尾寫入(輸出)數(shù)據(jù)ios::trunc打開一個文件,如果它已經(jīng)存在,就刪除其中原有的內(nèi)容ios::nocreate如果一個文件存在則打開它,否則該操作失敗ios::noreplace如果一個文件不存在則作為新文件打開它;如果文件已存在,則該操作失敗ios::binary以二進制模式打開一個文件,默認是文本模式18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計8.3.1fstream類表8-2文件處理函數(shù)函
數(shù)
功
能
說
明open(filename,mode)以mode模式打開名為filename的文件close()關(guān)閉文件is_open()檢查文件是否為打開狀態(tài),是則返回真,否則返回假write(str,size)將str數(shù)組中size個字符寫入到文件中read(str,size)從文件中讀取數(shù)據(jù)至文件結(jié)尾,并設(shè)定給str數(shù)組,但至多不超過size個字符18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計8.3.1fstream類C++的文件I/O模式分為兩種,一種為格式化文字模式,另一種為二進制模式,默認的文件I/O模式為文字模式。當(dāng)使用格式化文字模式時,輸出至文件的內(nèi)容將被儲存為字符,因此,格式化文字模式適合儲存字符或字符串。如果以二進制的方式處理數(shù)字,不論是儲存的方式,還是占有文件空間的方式都與其儲存在內(nèi)存中的方式相同,因此,在儲存數(shù)字時使用二進制模式是比較合適的。18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計8.3.2格式化文字模式的文件I/O文件的最小單位為字符,由字符組成一個字段,好幾個字段組成一個記錄,而一個文件則由好幾筆記錄組成。將數(shù)據(jù)輸入輸出到文件中,除了可以使用write和read函數(shù)外,還可以使用“<<”和“>>”運算符,而所有在8.2.1節(jié)中提及的格式控制方法,均可以在文件I/O中使用。18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計8.3.3二進制模式的文件I/O在二進制模式下,文件的I/O將利用write和read函數(shù)將所有數(shù)據(jù)以字節(jié)形式儲存至文件里。對于原本就是字符的數(shù)據(jù),并不需要轉(zhuǎn)型,即可讀取/寫入到文件里;但對于數(shù)字型的數(shù)據(jù),則必須轉(zhuǎn)為字符指針,然后傳入write和read函數(shù)。18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計8.3.4文件指針的使用文件指針是文件讀取/寫入數(shù)據(jù)時插入或輸出的位置。文件指針有兩種,一個是寫入指針,另一個是讀取指針。當(dāng)文件被打開時,這兩個指針都將被設(shè)定指向文件的起始處。在ios類里,定義了三個特定的文件指針。通過指針函數(shù)與特定的指針的配合使用,可供在處理文件I/O時移動文件指針之用。這三個位移指針分別是ios::beg(文件開頭)、ios::end(文件結(jié)尾)、ios::cur(當(dāng)前的指針位置)。18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計8.3.4文件指針的使用表8-3文件指針函數(shù)文件指針函數(shù)
功
能
說
明seekg(pos,seek_dir)設(shè)定文件讀?。ㄝ斎耄┲羔樀骄嚯x文件某一特定指針pos個字節(jié)的位置。特定指針由seek_dir指定,有以下三種ios::beg(文件起始)、ios::cur(當(dāng)前文件指針的位置)或ios::end(文件結(jié)尾)pos=tellg()返回當(dāng)前文件讀取指針的位置seekp(pos,seek_dir)設(shè)定文件寫入(輸出)指針到距離文件某一特定指針pos個字節(jié)的位置。特定指針由seek_dir指定,有以下三種ios::beg(文件起始)、ios::cur(當(dāng)前文件指針的位置)或ios::end(文件結(jié)尾)pos=tellp()返回當(dāng)前文件寫入指針的位置18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計項目設(shè)計7校園信息管理系統(tǒng)中的數(shù)據(jù)存儲1設(shè)計題目校園信息管理系統(tǒng)中的數(shù)據(jù)存儲2設(shè)計概要要求掌握面向?qū)ο蟪绦蛟O(shè)計方法,I/O流的概念,以及如何利用文件存儲對象。3系統(tǒng)分析4功能模塊設(shè)計18十二月2023C++面向?qū)ο蟪绦蛟O(shè)計3系統(tǒng)分析現(xiàn)在校園信息管理系統(tǒng)已經(jīng)能夠完成人員信息的輸入、顯示和分析等一系列工作,但是現(xiàn)在的程序并不能將信息長期保
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版機床進出口買賣合同范本詳析2篇
- 2024年禁牧區(qū)水資源保護與管理合同
- 專業(yè)化油漆施工協(xié)議(2024年版)版B版
- 二零二五年高性能環(huán)保材料供應(yīng)與技術(shù)研發(fā)協(xié)議2篇
- 天府新區(qū)職業(yè)學(xué)院《信息內(nèi)容安全的理論與應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五版快遞行業(yè)專用包裝材料供應(yīng)協(xié)議2篇
- 2024版股權(quán)投資協(xié)議(投資金額和股權(quán)比例)3篇
- 2024運輸管理實訓(xùn)機構(gòu)運營合作協(xié)議3篇
- 天津商業(yè)大學(xué)寶德學(xué)院《圖像處理與機器視覺》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年高端混凝土預(yù)制構(gòu)件委托加工合同3篇
- 2024年江蘇省《輔警招聘考試必刷500題》考試題庫帶答案(達標(biāo)題)
- 高中家長會 高三上學(xué)期期末家長會
- 深圳南山區(qū)2024-2025上學(xué)期小學(xué)四年級數(shù)學(xué)期末試卷
- 藥店員工培訓(xùn)
- 環(huán)衛(wèi)工節(jié)前安全培訓(xùn)
- 李四光《看看我們的地球》原文閱讀
- 2024年全國“紀(jì)檢監(jiān)察”業(yè)務(wù)相關(guān)知識考試題庫(附含答案)
- DB32T 2305-2013 內(nèi)陸水域魚類資源調(diào)查規(guī)范
- 《陋室銘》(過關(guān)檢測)(原卷版)-2024年中考語文課內(nèi)39篇文言文閱讀
- 福建省福州市2023-2024學(xué)年高一上學(xué)期期末考試物理試卷 附答案
- 2024-2030年中國IT運營管理(ITOM)軟件行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
評論
0/150
提交評論