版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第九章文件操作預(yù)習(xí)檢查FileMode是個(gè)什么類型的數(shù)據(jù)?使用File類需要實(shí)例化嗎?用C#程序讀寫一個(gè)文件需要哪些基本步驟?StreamWriter類的作用是什么?靜態(tài)類和非靜態(tài)類的區(qū)別有哪些?集中測(cè)試2/44回顧與作業(yè)點(diǎn)評(píng)解析XML文件,在控制臺(tái)輸出相應(yīng)信息點(diǎn)評(píng)作業(yè)的提交情況和共性問(wèn)題<?xmlversion="1.0"encoding="utf-8"?><musicShop><music><title>雙截棍</title><signer>周杰倫</signer></music><music><title>SuperStar</title><signer>S.H.E</signer></music></musicShop>現(xiàn)場(chǎng)編程3/44作業(yè)點(diǎn)評(píng)本章任務(wù)實(shí)現(xiàn)文本讀寫器通過(guò)讀寫文件實(shí)現(xiàn)“網(wǎng)絡(luò)電視精靈”保存功能保存用戶定制的電視頻道啟動(dòng)程序時(shí),加載定制的頻道實(shí)現(xiàn)小型資源管理器系統(tǒng)啟動(dòng)時(shí),加載定制的電視臺(tái)4/44本章目標(biāo)掌握文本文件的讀寫會(huì)進(jìn)行文件和文件夾操作5/44為什么需要操作文件如何使得程序中的數(shù)據(jù)持久化?用數(shù)據(jù)庫(kù)實(shí)現(xiàn)成本太大適用于大批量數(shù)據(jù)使用文件對(duì)數(shù)據(jù)進(jìn)行持久化,用程序操作文件問(wèn)題分析6/44文件的應(yīng)用場(chǎng)合計(jì)算機(jī)上有多種文件可以保存數(shù)據(jù)這些文件你都熟悉吧?擴(kuò)展網(wǎng)絡(luò)電視精靈,保存我的電視臺(tái)問(wèn)題7/44如何讀寫文本文件讀寫一個(gè)文件的步驟創(chuàng)建一個(gè)文件流創(chuàng)建相應(yīng)的讀寫器(readerandwriter)執(zhí)行讀寫操作關(guān)閉讀寫器(readerandwriter)關(guān)閉文件流123458/44讀寫文本文件應(yīng)用實(shí)現(xiàn)文本文件讀寫器將文本框的內(nèi)容寫入Text.txt文件問(wèn)題演示示例1:文本讀寫器9/44創(chuàng)建文件流
FileStream
myfs=newFileStream(stringpath,
FileModemode);指定文件路徑FileMode枚舉Create:創(chuàng)建一個(gè)新文件。如果文件存在,則改寫舊文件Open:指定打開(kāi)現(xiàn)有文件。指定的文件必須存在,否則會(huì)發(fā)生異常CreateNew:新建一個(gè)文件。如果文件存在會(huì)發(fā)生異常,提示文件已經(jīng)存在Append:打開(kāi)現(xiàn)有文件追加指定如何打開(kāi)文件引入System.IO命名空間—提供文件操作的類文件流(FileStream類)用于讀寫文件語(yǔ)法10/44常見(jiàn)錯(cuò)誤閱讀如下代碼,是否能正確運(yùn)行?stringpath="D:\Text.txt";FileStreamfs=newFileStream(path,FileMode.Create);代碼閱讀stringpath="D:\\Text.txt";stringpath=@"D:\Text.txt";11/44創(chuàng)建寫入器和讀取器文本文件寫入器:StreamWriter
StreamWritermySw=newStreamWriter(myfs);mySw.Write(content);
mySw.WriteLine(content);傳入文件流寫入方法文本文件讀取器:StreamReader寫入一行數(shù)據(jù)的方法
StreamReadermySr=newStreamReader(myfs);content=mySr.ReadToEnd();
content=mySr.ReadLine();傳入文件流讀取到文件末尾讀取一行12/44將數(shù)據(jù)寫入文本文件寫入文本文件
FileStreammyfs=newFileStream(path,FileMode.Create);StreamWritermySw=newStreamWriter(myfs);mySw.Write(content);mySw.Close();myfs.Close();創(chuàng)建一個(gè)文件流創(chuàng)建寫入器寫入操作關(guān)閉示例演示示例2:寫入文本文件13/44
FileStreammyfs=newFileStream(path,FileMode.Create);StreamWritermySw=newStreamWriter(myfs);mySw.Write(content);myfs.Close();mySw.Close();常見(jiàn)錯(cuò)誤閱讀如下代碼,是否能正確運(yùn)行?代碼閱讀如果一個(gè)程序用了多個(gè)流、讀寫器,它們的關(guān)閉順序一般要和自身在程序中被創(chuàng)建的順序相反經(jīng)驗(yàn)14/44讀取文本文件讀取文本文件使用OpenFileDialog控件顯示打開(kāi)文件的窗口this.ofdMain.ShowDialog();
stringpath=ofdMain.FileName;
stringcontent;//……FileStreammyfs=newFileStream(path,FileMode.Open);StreamReadermySr=newStreamReader(myfs);content=mySr.ReadToEnd();txtContent.Text=content;mySr.Close();myfs.Close();創(chuàng)建一個(gè)文件流創(chuàng)建讀取器將流從當(dāng)前位置讀到末尾關(guān)閉選擇文件示例演示示例3:讀取文本文件15/44解決讀取時(shí)中文亂碼讀取包含中文的TXT文件時(shí),可能出現(xiàn)中文亂碼FileStreammyfs=newFileStream(path,FileMode.Open);//讀取器StreamReadermySr=newStreamReader(myfs,Encoding.Default);
content=mySr.ReadToEnd();txtContent.Text=content;//……默認(rèn)使用Unicode字符,設(shè)置Encoding改變默認(rèn)設(shè)置Encoding.UTF8或Encoding.Default或Encoding.GetEncoding("XXX")問(wèn)題示例演示示例4:使用Encoding解決中文亂碼16/44學(xué)員操作—定制信息寫入文本文件2-1訓(xùn)練要點(diǎn)文本文件寫入需求說(shuō)明將定制的頻道信息寫入文本文件save.txt寫入格式:頻道類型|電視臺(tái)名稱|節(jié)目單存儲(chǔ)路徑TypeA|北京電視臺(tái)|files/北京電視臺(tái).xml指導(dǎo)講解需求說(shuō)明17/44學(xué)員操作—定制信息寫入文本文件2-2實(shí)現(xiàn)思路編寫SaveAsText()方法,實(shí)現(xiàn)將定制的頻道信息存入.txt文件編寫主窗體的FormClosed的事件,調(diào)用SaveAsTxt()方法各寫入項(xiàng)間隔符的“|”可以換做其他符號(hào)必須保證這個(gè)符號(hào)不是寫入項(xiàng)中的內(nèi)容比如“/”指導(dǎo)提示完成時(shí)間:20分鐘18/44學(xué)員操作—讀取定制頻道信息需求說(shuō)明從文本文件save.txt讀取定制的頻道信息,并在主窗體運(yùn)行時(shí)加載,最終實(shí)現(xiàn)定制頻道信息的讀取練習(xí)完成時(shí)間:25分鐘19/44共性問(wèn)題集中講解常見(jiàn)問(wèn)題及解決辦法代碼規(guī)范問(wèn)題調(diào)試技巧共性問(wèn)題集中講解20/44文件操作的應(yīng)用文件操作還包括判斷文件是否存在、復(fù)制、移動(dòng)、刪除等等文件的復(fù)制和刪除問(wèn)題將源文件復(fù)制到目標(biāo)位置刪除源文件21/44文件操作File類:提供操作文件的各種方法方法說(shuō)明bool
Exists(stringpath)用于檢查指定文件是否存在,該方法返回一個(gè)布爾值void
Copy(stringsourceFileName,
stringdestFileName)將指定路徑的源文件中的內(nèi)容復(fù)制到目標(biāo)文件中,如果目標(biāo)文件不存在,則在指定路徑中新建一個(gè)文件void
Move(stringsourceFileName,
stringdestFileName)將指定文件移動(dòng)到一個(gè)新的路徑voidDelete(stringpath)刪除指定的文件,如果指定的文件不存在,則不引發(fā)異常22/44文件操作示例//檢查一個(gè)文件是否存在if(!File.Exists(this.txtFileName.Text)){MessageBox.Show("文件不存在");}else{//將源文件復(fù)制到一個(gè)新文件
File.Copy(this.txtFileName.Text,this.txtCopyName.Text);MessageBox.Show("復(fù)制成功!");}示例演示示例5:文件復(fù)制和刪除23/44目錄操作Directory類提供對(duì)文件夾的移動(dòng)、刪除等操作方法說(shuō)明bool
Exists(stringpath)用于檢查指定文件夾在磁盤上是否存在void
Move(stringsourceDirName,stringdestDirName)用于將文件或目錄及其內(nèi)容移到新位置void
Delete(stringpath,boolrecursive)刪除指定目錄,如果bool指定true,則刪除子目錄中的所有目錄內(nèi)容void
Delete(stringpath)從指定路徑刪除空目錄24/44靜態(tài)類與非靜態(tài)類File類與Directory類publicstatic
classFilepublicstatic
classDirectory靜態(tài)類靜態(tài)類非靜態(tài)類用static修飾不用static修飾只包含靜態(tài)成員可以包含靜態(tài)成員不可以包含實(shí)例成員可以包含實(shí)例成員使用類名調(diào)用靜態(tài)成員使用實(shí)例對(duì)象調(diào)用非靜態(tài)成員不能被實(shí)例化可以被實(shí)例化不能包含實(shí)例構(gòu)造函數(shù)包含實(shí)例構(gòu)造函數(shù)25/44靜態(tài)成員靜態(tài)成員:使用static修飾符class類名{publicstatic
數(shù)據(jù)類型變量名;publicstatic
返回值類型方法名(參數(shù)列表){
//方法體;}}靜態(tài)成員變量靜態(tài)成員方法,提供獨(dú)立于特定對(duì)象之外的普遍功能靜態(tài)成員為一個(gè)類的所有實(shí)體所共享,它屬于類,而不屬于類的某個(gè)對(duì)象!例如:太陽(yáng)語(yǔ)法注意26/44靜態(tài)成員的使用調(diào)用靜態(tài)成員以前使用過(guò)的靜態(tài)成員Console類實(shí)現(xiàn)控制臺(tái)顯示文本Math類獲取π值類名.變量名=XX;//給變量賦值類名.方法名();//調(diào)用靜態(tài)方法Console.WriteLine("你好!");Console.WriteLine(Math.PI);靜態(tài)方法靜態(tài)變量語(yǔ)法應(yīng)用場(chǎng)合:當(dāng)類不會(huì)有多個(gè)對(duì)象而更像是一個(gè)公用類的時(shí)候,或當(dāng)方法或?qū)傩允恰肮谩毙畔⒌臅r(shí)候聲明為靜態(tài)的比較好!經(jīng)驗(yàn)27/44常見(jiàn)錯(cuò)誤閱讀如下代碼,是否能正確運(yùn)行?publicclassStudent{publicstringname;publicintage;publicstaticstringcountry="China";}classProgram{staticvoidMain(string[]args){SayHi();
Studentstu=newStudent();Console.WriteLine("學(xué)生國(guó)籍:"
+stu.country);
}publicvoidSayHi(){Console.WriteLine("helloworld!");}}代碼閱讀靜態(tài)方法只能調(diào)用靜態(tài)方法靜態(tài)成員只能由類名調(diào)用注意28/44靜態(tài)成員與實(shí)例成員使用static修飾的成員稱為靜態(tài)成員使用實(shí)例對(duì)象調(diào)用的成員稱為實(shí)例成員靜態(tài)方法實(shí)例方法static關(guān)鍵字不需要static關(guān)鍵字使用類名調(diào)用使用實(shí)例對(duì)象調(diào)用可以訪問(wèn)靜態(tài)成員可以訪問(wèn)靜態(tài)成員不可以直接訪問(wèn)實(shí)例成員可以直接訪問(wèn)實(shí)例成員調(diào)用前初始化實(shí)例化對(duì)象時(shí)初始化29/4329/44FileInfofi=newFileInfo(@"D:\temp\FileInfo.txt");Console.WriteLine("文件是否存在:"+fi.Exists);Console.WriteLine("文件名:"+fi.Name);Console.WriteLine("文件目錄名:"+fi.Directory.Name);fi.CopyTo("E:\\temp\\FileInfo.txt");屬性/方法說(shuō)明Exists用于檢查指定文件是否存在,返回一個(gè)布爾值Extension獲取表示文件擴(kuò)展名部分的字符串Name獲取文件名FullName獲取目錄或文件的完整目錄FileInfoCopyTo(string)將現(xiàn)有文件復(fù)制到新文件,不允許覆蓋現(xiàn)有文件void
Delete()永久刪除文件voidMoveTo(string)將指定文件移到新位置提供實(shí)例方法的文件類FileInfo類示例經(jīng)驗(yàn)應(yīng)用場(chǎng)景:由于File類的靜態(tài)方法在使用時(shí)都會(huì)進(jìn)行安全檢查,所以如果想要多次使用某個(gè)文件對(duì)象,可以考慮使用FileInfo類相應(yīng)的實(shí)例方法,因?yàn)椴⒉豢偸切枰踩珯z查30/44方法說(shuō)明DirectoryInfo[]GetDirectories()返回當(dāng)前目錄的子目錄對(duì)象數(shù)組FileInfo[
]
GetFiles()返回當(dāng)前目錄下文件列表(FileInfo對(duì)象數(shù)組)提供實(shí)例方法的文件類DirectoryInfo類示例DirectoryInfodi=newDirectoryInfo(@"D:\test");//返回當(dāng)前目錄的子目錄DirectoryInfo[]subDir=di.GetDirectories();//返回當(dāng)前目錄的文件列表FileInfo[
]
fi=di.GetFiles();經(jīng)驗(yàn)應(yīng)用場(chǎng)景:如果打算多次重用某個(gè)目錄對(duì)象,可以考慮使用DirectoryInfo類的實(shí)例方法31/44文件操作綜合應(yīng)用3-1開(kāi)發(fā)小型資源管理器,可以瀏覽文件信息顯示選定文件夾下的文件列表顯示D盤下文件夾結(jié)構(gòu)問(wèn)題32/44文件操作綜合應(yīng)用3-2綁定當(dāng)前目錄下子目錄到TreeView中DirectoryInfodirectoryInfo=newDirectoryInfo(node.Tag.ToString());DirectoryInfo[]dirs=directoryInfo.GetDirectories();foreach(DirectoryInfodiindirs){TreeNodetemp=newTreeNode();temp.Text=di.Name;temp.Tag=di.FullName;node.Nodes.Add(temp);}D:\獲取D:\的子目錄遍歷子目錄,獲取目錄信息分析33/44FileInfo[]fileInfo=directoryInfo.GetFiles();
List<MyFile>files=newList<MyFile>();//MyFile類用來(lái)存儲(chǔ)文件信息foreach(FileInfomyFileinfileInfo){MyFilefile=newMyFile();file.FileName=myFile.Name;
file.FileLength=myFile.Length;
file.FileType=myFile.Extension;
file.FilePath=myFile.FullName;files.Add(file);}文件操作綜合應(yīng)用3-3獲取文件夾下文件列表獲取某目錄下所有文件文件名文件長(zhǎng)度文件擴(kuò)展部分的字符串完整目錄分析演示示例6:小型資源管理器34/44學(xué)員操作—顯示文件信息需求說(shuō)明實(shí)現(xiàn)小型資源管理器,支持顯示文件信息使用TreeView控件顯示文件夾結(jié)構(gòu)使用ListView控件顯示選定文件夾下文件列表練習(xí)完成時(shí)間:25分鐘35/44共性問(wèn)題集中講解常見(jiàn)問(wèn)題及解決辦法代碼規(guī)范問(wèn)題調(diào)試技巧共性問(wèn)題集中講解36/44學(xué)員操作—實(shí)現(xiàn)文件復(fù)制2-1訓(xùn)練要點(diǎn)使用File類需求說(shuō)明完善小型資源管理器,實(shí)現(xiàn)文件復(fù)制支持用戶從“瀏覽文件夾”對(duì)話框選定目標(biāo)位置方便用戶選擇文件復(fù)制目標(biāo)位置指導(dǎo)講解需求說(shuō)明37/44學(xué)員操作—實(shí)現(xiàn)文件復(fù)制2-2打開(kāi)“瀏覽文件夾”,并獲得選擇的存儲(chǔ)路徑FolderBrowserDialogfbd
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個(gè)人住宅室內(nèi)外裝飾裝修工程監(jiān)理合同4篇
- 2025年度船舶港口作業(yè)安全管理合同4篇
- 2025版國(guó)際貿(mào)易糾紛解決服務(wù)合同標(biāo)準(zhǔn)范本4篇
- 2025年度個(gè)人商業(yè)保理質(zhì)押擔(dān)保合同書3篇
- 2025年度廚師國(guó)際項(xiàng)目合作與雇傭合同4篇
- 2025年度供應(yīng)鏈金融擔(dān)保服務(wù)合同
- 2025年度通風(fēng)系統(tǒng)安裝與防雷保護(hù)合同
- 二零二五版汽車抵押貸款合同爭(zhēng)議解決與仲裁條款2篇
- 2025年度智能穿戴設(shè)備產(chǎn)品試用合同4篇
- 2025年度大棚農(nóng)業(yè)生態(tài)循環(huán)體系建設(shè)合同4篇
- 骨科手術(shù)后患者營(yíng)養(yǎng)情況及營(yíng)養(yǎng)不良的原因分析,骨傷科論文
- GB/T 24474.1-2020乘運(yùn)質(zhì)量測(cè)量第1部分:電梯
- GB/T 12684-2006工業(yè)硼化物分析方法
- 定崗定編定員實(shí)施方案(一)
- 高血壓患者用藥的注意事項(xiàng)講義課件
- 特種作業(yè)安全監(jiān)護(hù)人員培訓(xùn)課件
- (完整)第15章-合成生物學(xué)ppt
- 太平洋戰(zhàn)爭(zhēng)課件
- 封條模板A4打印版
- T∕CGCC 7-2017 焙烤食品用糖漿
- 貨代操作流程及規(guī)范
評(píng)論
0/150
提交評(píng)論