




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、文本文件的讀寫正確的文本文件讀寫過(guò)程1.定義文件變量;2.打開(kāi)指定的文件;3.向從文本文件中寫入信息;4.從文本文件中讀取信息;5.關(guān)閉文件1、定義文件變量定義文件變量格式:CStdioFile 文件變量;例如,定義一個(gè)名稱為f1的文件變量,語(yǔ)句如下:CStdioFile f1;2、打開(kāi)指定文件可以直接通過(guò)CStdioFile的構(gòu)造函數(shù)來(lái)打開(kāi)磁盤文件,同時(shí)可以用標(biāo)志位指定打開(kāi)方式(只讀、只寫、讀寫等):CStdioFile(LPCTSTR lpszFileName,UINT nOpenFlags);其中,lpszFileName表示要打開(kāi)的文件名,可以是相對(duì)路徑或絕對(duì)路徑nOpenFlags設(shè)
2、置文件打開(kāi)方式標(biāo)志位,可以指定用“|”連接多個(gè)標(biāo)志位。下面是常用的打開(kāi)標(biāo)志:CFile:typeText:以文本文件的形式打開(kāi)文件CFile:typeBinary:以二進(jìn)制文件的形式打開(kāi)文件CFile:modeCreate:如果指定文件名的文件不存在,則新建文件;如果文件存在并且沒(méi)有設(shè)置CFile:modeNoTruncate標(biāo)志,則清空文件。CFile:modeNoTruncate:如果文件存在,不把它的長(zhǎng)度刪除為0(即不清空文件中的數(shù)據(jù))。:以只讀方式打開(kāi)文件CFile:modeReadWrite:以可讀可寫方式打開(kāi)文件CFile:modeWrite:以只寫方式打開(kāi)文件CFile:shar
3、eDenyNone:文件打開(kāi)后,不禁止其他進(jìn)程對(duì)文件的讀寫操作CFile:shareExclusive:文件打開(kāi)后,禁止其他進(jìn)程對(duì)文件的讀寫操作CFile:shareDenyRead:文件打開(kāi)后,禁止其他進(jìn)程對(duì)文件的讀操作CFile:shareDenyWrite:文件打開(kāi)后,禁止其他進(jìn)程對(duì)文件的寫操作此外,可以不在構(gòu)造函數(shù)中打開(kāi)文件,而僅僅調(diào)用空的構(gòu)造函數(shù)CStidoFile(),然后用CStdioFile:Open()打開(kāi)文件。Open函數(shù)的前兩個(gè)參數(shù)和非空構(gòu)造函數(shù)的參數(shù)相同,其聲明如下:BOOL Open(LPCTSTR lpszFileName,UINT nOpenFlags,CFile
4、Exception* pError=NULL);第3個(gè)參數(shù)與打開(kāi)失敗時(shí)的異常處理有關(guān)。實(shí)例1:以只讀方式打開(kāi)一個(gè)文件步驟:使用AppWizard創(chuàng)建一個(gè)對(duì)話框應(yīng)用程序,刪除其自動(dòng)產(chǎn)生的所有控件,添加一個(gè)Button控件。雙擊控件,在相應(yīng)的函數(shù)里添加代碼:char * pszFileName="C:myfile.txt"CStdioFile myFile;CFileException fileException;if(!myFile.Open(pszFileName,CFile:modeCreate|CFile:typeText|CFile:modeRead),&fi
5、leException)TRACE("Can't open file %s, error = %un",pszFileName,fileException.m_cause);運(yùn)行結(jié)果:如果C:下沒(méi)有myfile.txt文件,則新生成該文件。3.向從文本文件中寫入信息CStdioFile提供了函數(shù)WriteString來(lái)向文本文件中寫入文本,WriteString函數(shù)的格式如下:void WriteString(LPCTSTR lpsz);WriteString的參數(shù)lpsz是一個(gè)以”0”字符結(jié)束的字符串,要把這個(gè)字符串的內(nèi)容寫入文件。提示:使用WriteString
6、函數(shù)時(shí),如果希望每執(zhí)行一次WriteString,文本文件中的內(nèi)容就會(huì)自動(dòng)換行一次,那么就需要在需要換行的地方輸出“n”:myFile.WriteString(“第1行n”);實(shí)例2:向文件中寫入文本建立MFC基于對(duì)話框的程序,刪除自動(dòng)添加的所有控件,添加一個(gè)“確定”按鈕,雙擊按鈕,按默認(rèn)添加事件函數(shù),雙擊按鈕,在相應(yīng)的函數(shù)處添加如下代碼:char* pszFileName="C:myfile.txt"CStdioFile myFile;CFileException fileException;if(myFile.Open(pszFileName,CFile:typeTex
7、t|CFile:modeCreate|CFile:modeReadWrite),&fileException)myFile.WriteString("第1行n");CString strOrder;strOrder.Format("%d,%.3f",66,88.88);myFile.WriteString(strOrder);elseTRACE("Can't open file %s,error=%un",pszFileName,fileException.m_cause);程序運(yùn)行結(jié)果:C:myfile.txt文件中
8、內(nèi)容如下:第1行66,88.8804.從文本文件中讀取信息CStidoFile提供了函數(shù)ReadString來(lái)讀取文本,ReadString有兩種形式,一種為:virtual LPTSTR ReadString(LPTSTR lpsz, UINIT nMax);ReadString函數(shù)的參數(shù)如下:lpsz :是用戶提供的一個(gè)指向字符串的指針,它用來(lái)接受從文件讀出的文本,以”0”結(jié)束。nMax是本次所允許讀入的文本字符個(gè)數(shù),不計(jì)“0”字符,也就是說(shuō)最多能讀入nMax-1個(gè)文本字符。ReadString的返回值是一個(gè)LPTSTR類型的指針,它指向從文件讀出的文本字符串,如果到達(dá)文件尾,則返回NUL
9、L。ReadString的另一種形式為:BOOL ReadString(CString& rString);參數(shù)rString用來(lái)容納從文件讀出的文本。CString版本忽略回車換行符,返回值是一個(gè)布爾值。如果返回值為FALSE,表示因到達(dá)文件尾而沒(méi)有讀到任何字符。提示:每執(zhí)行一次ReadString,就會(huì)自動(dòng)從文本文件中讀取一行數(shù)據(jù),同時(shí)文件操作指針會(huì)自動(dòng)跳轉(zhuǎn)到下一行。實(shí)例3:從文件中讀取文本信息步驟:創(chuàng)建基于對(duì)話框的MFC程序,刪除所有自動(dòng)添加的控件,添加按鈕控件,為按鈕添加事件,并在相應(yīng)的函數(shù)處,添加如下代碼:char* pszFileName="C:myfile.tx
10、t"CStdioFile myFile;CFileException fileException;if(myFile.Open(pszFileName,CFile:typeText|CFile:modeReadWrite),&fileException)myFile.SeekToBegin();CString str1;myFile.ReadString(str1);CString str2;myFile.ReadString(str2);AfxMessageBox(str1+str2);elseTRACE("Can't open file %s,error
11、=%un",pszFileName,fileException.m_cause);myFile.Close();5.關(guān)閉文件對(duì)文件的操作完成后,使用CloseFile關(guān)閉文件。函數(shù)CStdioFile:Close關(guān)閉一個(gè)文件,一般一個(gè)文件使用完畢就應(yīng)該關(guān)閉它:myFile.Close();錯(cuò)誤的文本文件讀寫過(guò)程在讀寫文本文件的時(shí)候,最常見(jiàn)的錯(cuò)誤是-操作文件不存在。這種錯(cuò)誤產(chǎn)生的典型原因有:1.路徑錯(cuò)誤char * pszFileName="C:WindowsMyFile.txt"CStdioFile myFile;CFileException fileExcept
12、ion;if(!myFile.Open(pszFileName,CFile:modeCreate|CFile:typeText|CFile:modeReadWrite),&fileException)/文件操作代碼elseTRACE("Can't open file %s, error = %un",pszFileName,fileException.m_cause);myFile.Close();由于將文件變量與一個(gè)絕對(duì)路徑的文件名關(guān)聯(lián),而程序的數(shù)據(jù)通常存儲(chǔ)在相對(duì)路徑下,所以一旦相對(duì)路徑和相對(duì)路徑不一致時(shí),就會(huì)出錯(cuò)。舉例而言,上一段程序本意是想從windo
13、ws的安裝目錄下面的MyTextFile.txt文件中讀取一行數(shù)據(jù),但是如果操作系統(tǒng)安裝的路徑不是C:Windwos,而是C:Winnt,那么這段程序就會(huì)出錯(cuò)。解決方法是在程序中使用相對(duì)路徑,改正后的程序如下:/獲取windows路徑LPTSTR lpBuffer=new charMAX_PATH;:GetWindowsDirectory(lpBuffer,MAX_PATH);strcat(lpBuffer,"MyFile.txt");CStdioFile myFile;CFileException fileException;if(myFile.Open(lpBuffer
14、,CFile:typeText|CFile:modeCreate|CFile:modeReadWrite),&fileException)/文件操作代碼elseTRACE("Can't open file %s, error = %un",pszFileName,fileException.m_cause);myFile.Close();由于將文件變量與一個(gè)絕對(duì)路徑的文件名關(guān)聯(lián),而程序的數(shù)據(jù)通常存儲(chǔ)在相對(duì)路徑下,所以一旦相對(duì)路徑和相對(duì)路徑不一致時(shí),就會(huì)出錯(cuò)。舉例而言,上一段程序本意是想從windows的安裝目錄下面的MyTextFile.txt文件中讀取一行
15、數(shù)據(jù),但是如果操作系統(tǒng)安裝的路徑不是C:Windwos,而是C:Winnt,那么這段程序就會(huì)出錯(cuò)。解決方法是在程序中使用相對(duì)路徑,改正后的程序如下:/獲取windows路徑LPTSTR lpBuffer=new charMAX_PATH;:GetWindowsDirectory(lpBuffer,MAX_PATH);strcat(lpBuffer,"MyFile.txt");CStdioFile myFile;CFileException fileException;if(myFile.Open(lpBuffer,CFile:typeText|CFile:modeCreat
16、e|CFile:modeReadWrite),&fileException)/文件操作代碼elseTRACE("Can't open file %s, error = %un",pszFileName,fileException.m_cause);CString strFileTitle="MyFile.txt"CStdioFile myFile;CFileException fileException;if(myFile.Open(strFileTitle,CFile:typeText|CFile:modeReadWrite),&
17、;fileException)/文件操作代碼myFile.WriteString("測(cè)試!");elseTRACE("Can't open file %s, error = %un",pszFileName,fileException.m_cause);myFile.Close();2.操作文件不存在如果應(yīng)用程序所有路徑下面不存在MyFile.txt文件,那么在WriteString寫入信息時(shí)就會(huì)出錯(cuò)。解決辦法就是在程序中打開(kāi)文件前要檢查是否存在此文件。如下程序:CString strFileTitle="MyFile.txt"
18、;CFileFind finder;if(finder.FindFile(strFileTitle)CStdioFile myFile;CFileException fileException;if(myFile.Open(lpBuffer,CFile:typeText|CFile:modeCreate|CFile:modeReadWrite),&fileException)/文件操作代碼elseTRACE("Can't open file %s, error = %un",pszFileName,fileException.m_cause);elseTRA
19、CE("Can't find file %sn",strFileTitle);myFile.Close();3.超越文件權(quán)限進(jìn)行讀寫操作在打開(kāi)文件的過(guò)程中,通過(guò)參數(shù)指定了文件的讀寫權(quán)限,如果讀寫的操作沒(méi)有和相應(yīng)的權(quán)限對(duì)應(yīng),就會(huì)出現(xiàn)錯(cuò)誤。下面的程序就是典型的忽略了文件操作權(quán)限的例子:CString strFileTitle="MyFile.txt"CStdioFile myFile;CFileException fileException;if(myFile.Open(strFileTitle,CFile:typeText|CFile:modeCr
20、eate|CFile:NoTruncate|CFile:modeRead),&fileException)/文件操作代碼myFile.WriteString("測(cè)試!");elseTRACE("Can't open file %s,error=%un",strFileTitle,fileException.m_cause);myFile.Close();支招兒:1.準(zhǔn)確定位文件的路徑操作文件的過(guò)程中,經(jīng)常需要將文本文件放在程序自身的目錄中,但是如果僅僅在程序中使用不指定任何路徑信息的相對(duì)路徑,如:myFile.Open("MyF
21、ile.txt",CFile:modeCreate|CFile:typeText|CFile:modeReadWrite);那么就有可能出現(xiàn)不能正確定位的情況,準(zhǔn)確定位文件位置的方法是獲得可執(zhí)行程序自身的絕對(duì)路徑,如:TCHAR FilePathMAX_PATH;GetModuleFileName(NULL,FilePath,MAX_PATH);(_tcstchr(FilePath,'')1=0;lstrcat(FilePath,_T("MyFile.txt");CStdioFile myFile;CFileException fileException;if(myFile.Open(FilePath,CFile:modeCreate|CFile:typeText|CFile:modeReadWrite),&fileException)/文件操作代碼elseTRACE("Can't open file %s,erro
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報(bào)書 周以華
- 初中課題立項(xiàng)申報(bào)書
- 廠房委托招商合同范本
- 省級(jí)高校教改課題申報(bào)書
- 醫(yī)療維修托管合同范本
- 咨詢產(chǎn)品服務(wù)合同范本
- 美學(xué)課題申報(bào)書格式要求
- 研究生課題申報(bào)書分工
- 出境加工合同范例
- 關(guān)于郵寄合同范本
- 穴位埋線療法在高血壓管理中的應(yīng)用
- 2024年度(完整版)《各種各樣的天氣》課件
- 企業(yè)安全培訓(xùn)課件-網(wǎng)絡(luò)與信息安全
- 《無(wú)障礙設(shè)計(jì)》課件
- 綠化養(yǎng)護(hù)服務(wù)方案(技術(shù)標(biāo) 方案)
- 《長(zhǎng)征勝利萬(wàn)歲》楊成武-【中職專用】高一語(yǔ)文下學(xué)期同步課堂(高教版2023·基礎(chǔ)模塊下冊(cè))
- 二級(jí)公立醫(yī)院績(jī)效考核三級(jí)手術(shù)目錄(2020版)
- 云母制品在阻燃材料中的應(yīng)用
- 月考后正確的試卷分析方法分析研究
- 小波分析及其MATLAB實(shí)現(xiàn)
- 2021中國(guó)靜脈血栓栓塞癥防治抗凝藥物的選用與藥學(xué)監(jiān)護(hù)指南(2021版)解讀
評(píng)論
0/150
提交評(píng)論