版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、文本文件的讀寫正確的文本文件讀寫過程1. 定義文件變量;2打開指定的文件;3.向從文本文件中寫入信息;4.從文本文件中讀取信 息;5.關(guān)閉文件1、定義文件變量定義文件變量格式:CStdioFile 文件變量;例如,定義一個名稱為fl的文件變量,語句如下:CStdioFile f1;2、打開指定文件可以直接通過CStdioFile的構(gòu)造函數(shù)來打開磁盤文件,同時可以用標志位指定打開方式(只讀、只寫、讀寫等):CStdioFile(LPCTSTR lpszFileName,UINT nOpe nFlags);其中,lpszFileName表示要打開的文件名,可以是相對路徑或絕對路徑nOpenFlag
2、s設(shè)置文件打開方式標志位,可以指定用“連接多個標志位。下面是常用的打開標志:CFile:typeText :以文本文件的形式打開文件CFile:typeBi nary :以二進制文件的形式打開文件CFile:modeCreate :如果指定文件名的文件不存在,則新建文件;如果文件存在并且沒有設(shè)置CFile:modeNoTruncate 標志,則清空文件。CFile:modeNoTruncate:如果文件存在,不把它的長度刪除為 0(即不清空文件中的數(shù)據(jù))。CFile:modeRead :以只讀方式打開文件CFile:modeReadWrite:以可讀可寫方式打開文件CFile:modeWrit
3、e :以只寫方式打開文件CFile:shareDe ny No ne:文件打開后,不禁止其他進程對文件的讀寫操作CFile:shareExclusive:文件打開后,禁止其他進程對文件的讀寫操作CFile:shareDe nyRead:文件打開后,禁止其他進程對文件的讀操作CFile:shareDe ny Write:文件打開后,禁止其他進程對文件的寫操作此外,可以不在構(gòu)造函數(shù)中打開文件,而僅僅調(diào)用空的構(gòu)造函數(shù)CStidoFile (),然后用CStdioFile:Open()打開文件。Open函數(shù)的前兩個參數(shù)和非空構(gòu)造函數(shù)的參數(shù)相同,其聲明如下:BOOL Ope n( LPCTSTR lps
4、zFileName,UINT nOpen Flags,CFileExceptio n* pError=NULL);第3個參數(shù)與打開失敗時的異常處理有關(guān)。實例1:以只讀方式打開一個文件步驟:使用AppWizard創(chuàng)建一個對話框應(yīng)用程序,刪除其自動產(chǎn)生的所有控件,添加一個Button控件。雙擊控件,在相應(yīng)的函數(shù)里添加代碼:char * pszFileName=C:myfile.txt;CStdioFile myFile;CFileException fileException;if(!myFile.Ope n(pszFileName,CFile:modeCreate|CFile:typeText|
5、CFile:modeRead), &fileExcepti on)TRACE(Cant open file %s, error = %un,pszFileName,fileException.m_cause);運行結(jié)果:如果下沒有myfile.txt文件,則新生成該文件。3. 向從文本文件中寫入信息CStdioFile提供了函數(shù) WriteString來向文本文件中寫入文本,WriteString函數(shù)的格式如下:void WriteStri ng(LPCTSTR lpsz);WriteString的參數(shù)lpsz是一個以0字符結(jié)束的字符串,要把這個字符串的內(nèi)容寫入文件。提示:使用WriteStr
6、ing函數(shù)時,如果希望每執(zhí)行一次WriteString,文本文件中的內(nèi)容就會自動換行一次,那么就需要在需要換行的地方輸出n:myFile.WriteString( 第 1 行 n;實例2:向文件中寫入文本建立MFC基于對話框的程序,刪除自動添加的所有控件,添加一個 確定”按鈕,雙擊按鈕,按默認添加事件函數(shù),雙擊按鈕,在相應(yīng)的函數(shù)處添加如下代碼:char* pszFileName=C:myfile.txt;CStdioFile myFile;CFileException fileException;if(myFile.Ope n(pszFileName,CFile:typeText|CFile:
7、modeCreate|CFile:modeReadWrite),&fileExceptio n)myFile.WriteStri ng(第 1 行 n);CStri ng strOrder;strOrder.Format(%d,%.3f,66,88.88);myFile.WriteStri ng(strOrder);elseTRACE(Cant open file %s,error=%un,pszFileName,fileException.m_cause);程序運行結(jié)果:C:myfile.txt文件中內(nèi)容如下:第1行66,88.8804. 從文本文件中讀取信息CStidoFile提供了函數(shù)
8、ReadString來讀取文本,ReadString有兩種形式,一種為:virtual LPTSTR ReadStri ng(LPTSTR lps z, UINIT nM ax);ReadString函數(shù)的參數(shù)如下:lpsz :是用戶提供的一個指向字符串的指針,它用來接受從文件讀出的文本,以”0”結(jié)束。nMax是本次所允許讀入的文本字符個數(shù),不計0字符,也就是說最多能讀入 nMax-1個文本字符。ReadString的返回值是一個 LPTSTR類型的指針,它指向從文件讀出的文本字符串,如果 到達文件尾,則返回 NULL。ReadString的另一種形式為:BOOL ReadString(CSt
9、ring& rString);參數(shù)rString用來容納從文件讀出的文本。CString版本忽略回車換行符,返回值是一個布爾值。如果返回值為FALSE ,表示因到達文件尾而沒有讀到任何字符。提示:每執(zhí)行一次ReadString,就會自動從文本文件中讀取一行數(shù)據(jù),同時文件操作指針 會自動跳轉(zhuǎn)到下一行。實例3:從文件中讀取文本信息步驟:創(chuàng)建基于對話框的MFC程序,刪除所有自動添加的控件,添加按鈕控件,為按鈕添加事件,并在相應(yīng)的函數(shù)處,添加如下代碼:char* pszFileName=C:myfile.txt;CStdioFile myFile;CFileException fileExceptio
10、n;if(myFile.Ope n(pszFileName,CFile:typeText|CFile:modeReadWrite), &fileExceptio n)myFile.SeekToBegi n();CStri ng str1;myFile.ReadStri ng(str1);CStri ng str2;myFile.ReadStri ng(str2);AfxMessageBox(str1+str2);elseTRACE(Cant open file %s,error=%un,pszFileName,fileException.m_cause); myFile.Close();5.
11、關(guān)閉文件對文件的操作完成后,使用CloseFile關(guān)閉文件。函數(shù)CStdioFile:Close 關(guān)閉一個文件,一般一個文件使用完畢就應(yīng)該關(guān)閉它:myFile.Close();錯誤的文本文件讀寫過程在讀寫文本文件的時候,最常見的錯誤是-操作文件不存在。這種錯誤產(chǎn)生的典型原因有:1. 路徑錯誤char * pszFileName=C:WindowsWMyFile.txt;CStdioFile myFile;CFileException fileException;if(!myFile.Ope n( pszFileName,CFile:modeCreate|CFile:typeText|CFile
12、:modeReadWrite) ,& fileExcepti on)文件操作代碼elseTRACE(Cant open file %s, error = %un,pszFileName,fileException.m_cause);myFile.Close();由于將文件變量與一個絕對路徑的文件名關(guān)聯(lián),而程序的數(shù)據(jù)通常存儲在相對路徑下,所以一旦相對路徑和相對路徑不一致時,就會出錯。舉例而言,上一段程序本意是想從windows的安裝目錄下面的 MyTextFile.txt文件中讀取一行數(shù)據(jù),但是如果操作系統(tǒng)安裝的路徑不是C:Windwos,而是C:Winnt,那么這段程序就會出錯。解決方法是在程
13、序中使用相對路徑,改正后的程序如下: 獲取windows路徑LPTSTR lpBuffer= new charMAX_PATH;:GetWi ndowsDirectory (l pBuffer,MAX_PATH);strcat (l pBuffer,MyFile.txt);CStdioFile myFile;CFileException fileException;if(myFile.Ope n( lpBuffer,CFile:typeText|CFile:modeCreate|CFile:modeReadWrite), &fileE xcepti on)文件操作代碼elseTRACE(Can
14、t open file %s, error = %un,pszFileName,fileException.m_cause);myFile.Close();由于將文件變量與一個絕對路徑的文件名關(guān)聯(lián),而程序的數(shù)據(jù)通常存儲在相對路徑下,所以一旦相對路徑和相對路徑不一致時,就會出錯。舉例而言,上一段程序本意是想從 windows的安裝目錄下面的 MyTextFile.txt文件中讀取 一行數(shù)據(jù),但是如果操作系統(tǒng)安裝的路徑不是 C:Windwos,而是C:Winnt,那么這段程序就 會出錯。解決方法是在程序中使用相對路徑,改正后的程序如下:獲取windows路徑LPTSTR lpBuffer= new
15、 charMAX_PATH;:GetWi ndowsDirectory (l pBuffer,MAX_PATH);strcat (l pBuffer,MyFile.txt);CStdioFile myFile;CFileException fileException; if(myFile.Ope n( lpBuffer,CFile:typeText|CFile:modeCreate|CFile:modeReadWrite), &fileE xcepti on) 文件操作代碼elseTRACE(Cant open file %s, error = %un,pszFileName,fileExce
16、ption.m_cause);CStri ng strFileTitle=MyFile.txt;CStdioFile myFile;CFileException fileException;if(myFile.Ope n(strFileTitle,CFile:typeText|CFile:modeReadWrite), &fileExceptio n)文件操作代碼myFile.WriteStri ng(測試!);elseTRACE(Cant open file %s, error = %un,pszFileName,fileException.m_cause);myFile.Close();2
17、. 操作文件不存在如果應(yīng)用程序所有路徑下面不存在MyFile.txt文件,那么在WriteString寫入信息時就會出錯。解決辦法就是在程序中打開文件前要檢查是否存在此文件。如下程序:CStri ng strFileTitle=MyFile.txt;CFileFind finder;if(fin der.Fi ndFile(strFileTitle)CStdioFile myFile;CFileException fileException;if(myFile.Ope n( lpBuffer,CFile:typeText|CFile:modeCreate|CFile:modeReadWrite
18、), &fileE xcepti on)文件操作代碼elseTRACE(Cant open file %s, error = %un,pszFileName,fileException.m_cause);elseTRACE(Cant find file %sn”,strFileTitle);myFile.Close();3. 超越文件權(quán)限進行讀寫操作在打開文件的過程中,通過參數(shù)指定了文件的讀寫權(quán)限,如果讀寫的操作沒有和相應(yīng)的權(quán)限對應(yīng),就會出現(xiàn)錯誤。下面的程序就是典型的忽略了文件操作權(quán)限的例子:CStri ng strFileTitle=MyFile.txt;CStdioFile myFile;
19、CFileException fileException;if(myFile.Ope n(strFileTitle,CFile:typeText|CFile:modeCreate|CFile:NoTru ncate|CFile:m odeRead), &fileExcepti on)文件操作代碼myFile.WriteString(測試!);elseTRACE(Cant open file %s,error=%un,strFileTitle,fileException.m_cause);myFile.Close();支招兒:1.準確定位文件的路徑操作文件的過程中,經(jīng)常需要將文本文件放在程序自身的目錄中,但是如果僅僅在程序中使用不指定任何路徑信息的相對路徑,如:myFile.Ope n( MyFile.txt,CFile:modeCreate|CFile:typeText|CFile:modeReadWrite);那么就有可能出現(xiàn)不能正確定位的情況,準確定位文件位置的方法是獲得可執(zhí)行程序自身的絕對路徑,如:TCHAR FilePathMAX_PATH;GetModuleFileName(NULL,FilePath,MAX_PATH);(_tcstchr(FilePath,)1=O;lstrcat(FileP
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 道路工程機械加盟合同
- 服裝行業(yè)合伙協(xié)議范本
- 政府專項貸款合同模板
- 共同經(jīng)營電子產(chǎn)品商店協(xié)議書范本
- 賬戶監(jiān)管協(xié)議書范例
- 標準范本:2024年購銷合同協(xié)議書
- 2024年商品買賣合同范例
- 現(xiàn)代室內(nèi)裝潢設(shè)計合同范本
- 個人住房裝修合同2024年
- 陜西省漢中市普通高中十校聯(lián)盟2024年秋季學期高一年級期中考試語文試題
- 2024年采礦權(quán)轉(zhuǎn)讓合同范本
- 雙手向前投擲實心球 課件
- 第六章 回歸分析課件
- 醫(yī)務(wù)人員職業(yè)暴露預(yù)防及處理課件(完整版)
- 期中階段性練習(一~四單元)(試題)-2024-2025學年五年級上冊數(shù)學蘇教版
- 醫(yī)療設(shè)備供貨安裝調(diào)試培訓(xùn)、售后組織方案
- 期中考試模擬試卷 2024-2025學年人教版數(shù)學九年級上冊
- 朝鮮半島局勢演變
- 2024年云南德宏州州級事業(yè)單位選調(diào)工作人員歷年高頻難、易錯點500題模擬試題附帶答案詳解
- 2024年秋新魯科版三年級上冊英語課件 Unit 6 lesson 1
- 英語國家概況-Chapter10-government解析
評論
0/150
提交評論