




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C#程序設(shè)計(jì)實(shí)踐教程
C#ProgrammingPractice韓玉民余雨萍主編物有本末,事有終始,知所先后,則近道矣?!洞髮W(xué)》庫(kù)里乾坤大,卷中日月長(zhǎng)?!臋n管理經(jīng)典語(yǔ)錄文件與文件流第11章文件與文件夾第11章11.1文件基本操作11.2文件夾基本操作11.3文本文件讀寫(xiě)11.4二進(jìn)制文件讀寫(xiě)文件與文件夾第11章文件是計(jì)算機(jī)管理數(shù)據(jù)的基本單位,同時(shí)也是應(yīng)用程序保存和讀取數(shù)據(jù)的一個(gè)重要場(chǎng)所。.NETFramework中進(jìn)行的所有輸入、輸出工作都要用到文件流,文件流是計(jì)算機(jī)的輸入和輸出之間運(yùn)動(dòng)的字節(jié)序列。C#采用文件流模型讀寫(xiě)文件,按照文件流的方向把流分為兩種:輸入流和輸出流。輸入流用于將文件數(shù)據(jù)序列讀取到內(nèi)存中,輸出流用于將內(nèi)存數(shù)據(jù)寫(xiě)入到文件中。11.1文件基本操作文件的基本操作包括創(chuàng)建文件、刪除文件、查看文件信息、復(fù)制文件、判斷文件是否存在等。文件操作相關(guān)的類(lèi)主要有兩個(gè):File類(lèi)和FileInfo類(lèi)。File類(lèi)提供用于創(chuàng)建、復(fù)制、刪除、移動(dòng)和打開(kāi)單一文件的靜態(tài)方法,F(xiàn)ileInfo類(lèi)提供用于創(chuàng)建、復(fù)制、刪除、移動(dòng)和打開(kāi)文件的屬性和實(shí)例方法。方法說(shuō)明FileStreamOpen(stringpath,System.IO.FileModemode)文件打開(kāi)FileStreamCreate(stringpath)文件創(chuàng)建voidDelete(stringpath)文件刪除voidCopy(stringsourceFileName,stringdestFileName)文件復(fù)制voidMove(stringsourceFileName,stringdestFileName)文件移動(dòng)voidSetAttributes(stringpath,System.IO.FileAttributesfileAttributes)設(shè)置文件屬性boolExists(stringpath)判斷文件是否存在voidAppendAllText(stringpath,stringcontents)新建文件并添加文本stringReadAllText(stringpath)打開(kāi)并讀取文本表11-1File類(lèi)常用方法11.1文件基本操作圖11-2顯示文件短名稱(chēng)【實(shí)例11-1】使用File類(lèi)創(chuàng)建文件classProgram{staticvoidMain(string[]args){//設(shè)置文件路徑與文件名stringpath=@"F:\temp\MyTest.txt";if(!File.Exists(path)){//如果文件不存在,創(chuàng)建該文件
File.Create(path);Console.WriteLine($"創(chuàng)建文件:{name}成功!");}else{//如果文件存在,輸出文件名
stringname=Path.GetFileName(path);Console.WriteLine($"文件名為:{name}");}}}圖11-1創(chuàng)建文件11.1文件基本操作【實(shí)例11-2】使用FileInfo類(lèi)創(chuàng)建文件classProgram{staticvoidMain(string[]args){stringpath=@"F:\temp\MyTest.txt";//設(shè)置文件FileInfofi=newFileInfo(path);if(!fi.Exists){//如果文件不存在,創(chuàng)建該文件
fi.Create();Console.WriteLine($"創(chuàng)建文件:{path}成功!");}else{//如果文件存在,輸出文件名
stringname=fi.Name;Console.WriteLine($"文件名為:{name}");}}}11.1文件基本操作圖11-3移動(dòng)文件【實(shí)例11-3】移動(dòng)文件classProgram{staticvoidFileMove(stringsource,stringdest){FileInfofi=newFileInfo(source);fi.CopyTo(dest);//復(fù)制一份文件
fi.Delete();//刪除原文件
}staticvoidMain(string[]args){stringsource=@"F:\temp\MyTest.txt";//設(shè)置源文件變量
stringdest=@"F:\temp\MyTest_bak.txt";//設(shè)置目標(biāo)文件變量
FileInfofi=newFileInfo(source);if(fi.Exists){//如果文件不存在,創(chuàng)建該文件
FileMove(source,dest);
//也可通過(guò)下面代碼實(shí)現(xiàn)移動(dòng)
//fi.MoveTo(dest);Console.Write($"移動(dòng)文件:{source}到{dest}成功!");}else{//如果文件不存在,提示
Console.WriteLine($"文件名為:{source}不存在!");}}}11.2文件夾基本操作文件夾的基本操作包括創(chuàng)建文件夾、刪除文件夾、移動(dòng)、遍歷內(nèi)容等。文件夾操作相關(guān)的類(lèi)主要有兩個(gè):Directory類(lèi)和DirectoryInfo類(lèi)。Directory類(lèi)提供用于目錄和子目錄創(chuàng)建、移動(dòng)和枚舉的靜態(tài)方法,DirectoryInfo類(lèi)提供用于創(chuàng)建、移動(dòng)和枚舉目錄和子目錄的實(shí)例方法。表11-2Directory類(lèi)常用方法
方法名稱(chēng)說(shuō)明DirectoryInfoCreateDirectory(stringpath)目錄創(chuàng)建voidDelete(stringpath)目錄刪除voidMove(stringsourceDirName,stringdestDirName)目錄移動(dòng)string[]GetDirectories(stringpath)獲取目錄下的子目錄string[]GetFiles(stringpath)獲取目錄下的文件名boolExists(stringpath)判斷目錄是否存在11.2文件夾基本操作【實(shí)例11-4】復(fù)制文件夾publicstaticvoidCopyAll(DirectoryInfosource,DirectoryInfotarget){//如果源位置和目標(biāo)位置一樣,直接退出if(source.FullName.ToLower()==target.FullName.ToLower()){return;}//檢查目標(biāo)文件夾位置是否存在,如果不存在直接創(chuàng)建if(Directory.Exists(target.FullName)==false){Directory.CreateDirectory(target.FullName);}//把源文件夾下的所有文件復(fù)制到目標(biāo)文件夾下foreach(FileInfofiinsource.GetFiles()){Console.WriteLine(@"復(fù)制{0}\{1}",target.FullName,fi.Name);fi.CopyTo(Path.Combine(target.ToString(),fi.Name),true);}//對(duì)每個(gè)子文件夾,遞歸調(diào)用進(jìn)行復(fù)制foreach(DirectoryInfodiSourceSubDirinsource.GetDirectories()){DirectoryInfonextTargetSubDir=target.CreateSubdirectory(diSourceSubDir.Name);CopyAll(diSourceSubDir,nextTargetSubDir);}}11.2文件夾基本操作圖11-4文件夾復(fù)制【實(shí)例11-4】復(fù)制文件夾publicstaticvoidMain(){stringsourceDirectory=@"F:\sourceDirectory";stringtargetDirectory=@"F:\targetDirectory";DirectoryInfodiSource=newDirectoryInfo(sourceDirectory);DirectoryInfodiTarget=newDirectoryInfo(targetDirectory);CopyAll(diSource,diTarget);}11.3文本文件讀寫(xiě)文本文件是字符編碼的文件,常見(jiàn)的編碼標(biāo)準(zhǔn)有ANSI、Unicode、UTF-8等,通常以后綴名txt存在。System.IO命名空間中的FileStream類(lèi)用于文件的讀寫(xiě)與關(guān)閉,該類(lèi)派生自抽象類(lèi)Stream。表11-3FileStream類(lèi)常用屬性和方法屬性/方法名稱(chēng)說(shuō)明CanWrite判斷當(dāng)前流是否可寫(xiě)CanRead判斷該流是否能夠讀取CanSeek判斷該流是否移動(dòng)讀寫(xiě)位置Length獲取流的長(zhǎng)度(以字節(jié)為單位)。intRead(byte[]array,intoffset,intcount) 從流中讀取字節(jié)塊并將該數(shù)據(jù)寫(xiě)入給定緩沖區(qū)中voidWrite(byte[]array,intoffset,intcount)將字節(jié)塊(字節(jié)數(shù)組)寫(xiě)入該流longSeek(longoffset,System.IO.SeekOriginorigin);置文件讀取或?qū)懭氲钠鹗嘉恢胿oidFlush();清除此流的緩沖區(qū),使得所有緩沖數(shù)據(jù)都寫(xiě)入到文件中。11.3文本文件讀寫(xiě)創(chuàng)建文件流對(duì)象的方法如下:FileStream<stream>=newFileStream(<file_name>,<FileModefm>,<FileAccessfa>,<FileShareEnumeratorfs>);以下是對(duì)幾個(gè)參數(shù)的說(shuō)明:(1)FileMode:指定打開(kāi)文件的模式,包括下列6個(gè)枚舉值: FileMode.Append:打開(kāi)現(xiàn)有文件準(zhǔn)備向文件追加數(shù)據(jù); FileMode.Create:創(chuàng)建新文件,如果文件已經(jīng)存在它將被覆蓋; FileMode.CreateNew:創(chuàng)建新文件,如果文件已經(jīng)存在將引發(fā)異常; FileMode.Open:打開(kāi)現(xiàn)有文件; FileMode.OpenOrCreate:打開(kāi)文件,如果文件不存在創(chuàng)建新文件; FileMode.Truncate:打開(kāi)現(xiàn)有文件并且清空文件內(nèi)容。(2)FileAccess:指定文件操作模式,包括下列3個(gè)枚舉值: FileAccess.Read:對(duì)文件讀訪(fǎng)問(wèn); FileAccess.Write:對(duì)文件進(jìn)行寫(xiě)操作; FileAccess.ReadWrite:對(duì)文件讀或?qū)懖僮鳌?1.3文本文件讀寫(xiě)(3)FileShare:指定共享權(quán)限,包括下列4個(gè)四個(gè)枚舉值: FileShare.None:拒絕共享當(dāng)前文件; FileShare.Read:充許別的程序讀取當(dāng)前文件; FileShare.Write:充許別的程序?qū)懏?dāng)前文件; FileShare.ReadWrite:充許別的程序讀寫(xiě)當(dāng)前文件。使用FileStream對(duì)文件進(jìn)行操作的一般流程如圖11-5所示圖11-5文件操作一般流程11.3文本文件讀寫(xiě)StreamReader和StreamWriter類(lèi)用于文本文件的數(shù)據(jù)讀寫(xiě)。StreamReader類(lèi)繼承自抽象基類(lèi)TextReader,用來(lái)進(jìn)行讀取一系列字符的文件流對(duì)象,StreamWriter類(lèi)也繼承自抽象類(lèi)TextWriter,用來(lái)向文件寫(xiě)入一系列字符。屬性/方法名稱(chēng)說(shuō)明EndOfStream判斷當(dāng)前流是否到達(dá)末尾intPeek()返回下一個(gè)字符intRead()讀取一個(gè)字符stringReadLine()讀取一行字符串stringReadToEnd()讀取所有字符串屬性/方法名稱(chēng)說(shuō)明voidFlush()清空緩沖區(qū)voidWrite(boolvalue)寫(xiě)入bool類(lèi)型數(shù)據(jù)voidWrite(charvalue)寫(xiě)入char類(lèi)型數(shù)據(jù)voidWrite(decimalvalue)寫(xiě)入decimal類(lèi)型數(shù)據(jù)voidWrite(doublevalue)寫(xiě)入double類(lèi)型數(shù)據(jù)voidWrite(intvalue)寫(xiě)入int類(lèi)型數(shù)據(jù)voidWrite(longvalue)寫(xiě)入long類(lèi)型數(shù)據(jù)voidWrite(floatvalue)寫(xiě)入float類(lèi)型數(shù)據(jù)voidWrite(stringvalue)寫(xiě)入string類(lèi)型數(shù)據(jù)voidWriteLine()寫(xiě)入一個(gè)換行符voidWriteLine(stringvalue)寫(xiě)入string類(lèi)型數(shù)據(jù)并換行表11-4StreamReader類(lèi)常用屬性和方法表11-5StreamWriter類(lèi)常用方法11.3文本文件讀寫(xiě)【實(shí)例11-5】讀取文件內(nèi)容privatevoidtsOpen_Click(objectsender,EventArgse){OpenFileDialogdialog=newOpenFileDialog();dialog.Filter="*.txt|*.txt";//設(shè)置能夠打開(kāi)的文件類(lèi)型
if(DialogResult.OK==dialog.ShowDialog()){try{FileStreamstream=newFileStream(dialog.FileName,FileMode.Open,FileAccess.Read);using(StreamReadersr=newStreamReader(stream)){stringline;stringallLine="";//循環(huán)讀取文件里的每一行
while((line=sr.ReadLine())!=null){allLine+=line+"\r\n";}richTextBox1.Text=allLine;}}catch(Exceptionex){MessageBox.Show("文件不能讀?。?);Console.WriteLine(ex.Message);}}}(1)創(chuàng)建一個(gè)窗體應(yīng)用程序,項(xiàng)目名稱(chēng)為Example11_5。(2)添加MenuStrip菜單欄,定義其第一個(gè)菜單項(xiàng)名稱(chēng)為tsOpen,顯示文本為“打開(kāi)文件”。(3)雙擊“打開(kāi)文件”菜單項(xiàng),在其Click事件處理方法中輸入代碼11.3文本文件讀寫(xiě)【實(shí)例11-5】讀取文件內(nèi)容圖11-6文本文件閱讀器11.3文本文件讀寫(xiě)【實(shí)例11-6】寫(xiě)文本內(nèi)容到文件privatevoidtsSave_Click(objectsender,EventArgse){//定義一個(gè)文件保存對(duì)話(huà)框
SaveFileDialogdialog=newSaveFileDialog();dialog.Filter="*.txt|*.txt";//設(shè)置能夠打開(kāi)的文件類(lèi)型
if(DialogResult.OK==dialog.ShowDialog()){try{//定義文件流對(duì)象
FileStreamstream=newFileStream(dialog.FileName,FileMode.Create,FileAccess.Write);using(StreamWritersw=newStreamWriter(stream)){stringallLine=richTextBox1.Text;sw.Write(allLine);}}catch(Exceptionex){MessageBox.Show("文件寫(xiě)入失??!");Console.WriteLine(ex.Message);}}}(1)在實(shí)例11-5的菜單欄添加一個(gè)“保存文件”菜單項(xiàng),名稱(chēng)為tsSave(2)雙擊“保存文件”菜單項(xiàng),在其Click事件處理方法中輸入下列代碼11.4二進(jìn)制文件讀寫(xiě)二進(jìn)制文件是對(duì)值編碼的文件,一般是可執(zhí)行程序、圖形、圖像、音頻、視頻等文件,常見(jiàn)的文件后綴名有exe、dat、bin、jpg等。二進(jìn)制文件的讀取可以通過(guò)Stream類(lèi)來(lái)實(shí)現(xiàn),但是BinaryWriter類(lèi)和BinaryReader類(lèi)提供了更簡(jiǎn)單的方法。表11-6Stream類(lèi)常用屬性和方法屬性/方法名稱(chēng)說(shuō)明CanSeek判斷該流是否移動(dòng)讀寫(xiě)位置CanWrite判斷當(dāng)前流是否可寫(xiě)CanRead判斷該流是否能夠讀取Length流的長(zhǎng)度Position流操作的當(dāng)前位置voidFlush();將清除該流的所有緩沖區(qū),并使得所有緩沖數(shù)據(jù)被寫(xiě)入到基礎(chǔ)設(shè)備intRead(byte[]buffer,intoffset,intcount);從當(dāng)前流讀取字節(jié)序列,并將此流中的位置提升讀取的字節(jié)數(shù)longSeek(longoffset,System.IO.SeekOriginorigin)設(shè)定流中操作的位置voidWrite(byte[]buffer,intoffset,intcount);向當(dāng)前流中寫(xiě)入字節(jié)序列,并將此流中的當(dāng)前位置提升寫(xiě)入的字節(jié)數(shù)voidClose()關(guān)閉流并釋放資源11.4二進(jìn)制文件讀寫(xiě)表11-7BinaryReader類(lèi)常用方法方法說(shuō)明intPeekChar()返回下一個(gè)字符boolReadBoolean()讀取bool類(lèi)型數(shù)據(jù)byteReadByte()讀取byte類(lèi)型數(shù)據(jù)charReadChar()讀取char類(lèi)型數(shù)據(jù)decimalReadDecimal()讀取decimal類(lèi)型數(shù)據(jù)doubleReadDouble()讀取double類(lèi)型數(shù)據(jù)shortReadInt16()讀取short類(lèi)型數(shù)據(jù)intReadInt32()讀取int類(lèi)型數(shù)據(jù)longReadInt64()讀取long類(lèi)型數(shù)據(jù)floatReadSingle()讀取float類(lèi)型數(shù)據(jù)stringReadString()讀取有長(zhǎng)度前綴的一個(gè)字符串表11-8BinaryWriter類(lèi)常用方法方法說(shuō)明intSeek(Int32,SeekOrigin)設(shè)置當(dāng)前流的位置voidWrite(boolvalue)寫(xiě)入一個(gè)布爾數(shù)據(jù)voidWrite(bytevalue)寫(xiě)入一個(gè)字節(jié)數(shù)據(jù)voidWrite(charch)寫(xiě)入一個(gè)字符數(shù)據(jù)voidWrite(decimalvalue);寫(xiě)入decimal類(lèi)型數(shù)據(jù)voidWrite(doublevalue)寫(xiě)入double類(lèi)型數(shù)據(jù)voidWrite(shortvalue)寫(xiě)入short類(lèi)型數(shù)據(jù)voidWrite(intvalue)寫(xiě)入int類(lèi)型數(shù)據(jù)voidWrite(longvalue)寫(xiě)入long類(lèi)型數(shù)據(jù)voidWrite(floatvalue)寫(xiě)入float類(lèi)型數(shù)據(jù)voidWrite(stringvalue)寫(xiě)入有長(zhǎng)度前綴的一個(gè)字符串11.4二進(jìn)制文件讀寫(xiě)【實(shí)例11-7】使用BinaryWriter和BinaryReader讀寫(xiě)二進(jìn)制文件classProgram{//設(shè)置要讀寫(xiě)的二進(jìn)制文件conststringfileName="test.dat";staticvoidMain(){WriteDefaultValues();DisplayValues();}//寫(xiě)入數(shù)據(jù)publicstaticvoidWriteDefaultValues(){using(BinaryWriterwriter=newBinaryWriter(File.Open(fileName,FileMode.Create,FileAccess.Write))){//寫(xiě)入四種不同類(lèi)型的數(shù)據(jù)writer.Write(1.250f);writer.Write(@"test");writer.Write(10);writer.Write(true);}}//讀取數(shù)據(jù)publicstaticvoidDisplayValues(){if(File.Exists(fileName)){using(BinaryReaderreader=newBinaryReader(File.Open(fileName,FileMode.Open,FileAccess.Read))){//嚴(yán)格按寫(xiě)入的順序來(lái)讀取floatf1=reader.ReadSingle();strings1=reader.ReadString();inti1=reader.ReadInt32();boolb1=reader.ReadBoolean();Console.WriteLine("浮點(diǎn)數(shù):"+f1);Console.WriteLine("字符串:"+s1);Console.WriteLine("整型數(shù):"+i1);Console.WriteLine("布爾型值:"+b1);}}}}11.4二進(jìn)制文件讀寫(xiě)【實(shí)例11-8】使用FileStream讀寫(xiě)二進(jìn)制文件classProgram{staticvoidMain(string[]args){FileStreamstream=newFileStream("test.dat",FileMode.OpenOrCreate,FileAccess.ReadWrite);//寫(xiě)入20個(gè)字節(jié)的數(shù)據(jù)
for(inti=0;i<20;i++){stream.WriteByte((byte)i);}//重設(shè)流的位置為文件的起始位置
stream.Position=0;for(inti=0;i<20;i++){Console.Write(stream.ReadByte()+"");}//關(guān)閉流
stream.Close();Console.WriteLine();}}圖11-8FileStream讀寫(xiě)二進(jìn)制文件11.4二進(jìn)制文件讀寫(xiě)【實(shí)例11-9】使
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)產(chǎn)品電商農(nóng)村電商發(fā)展手冊(cè)
- 三農(nóng)村新型城鎮(zhèn)化發(fā)展規(guī)劃綱要
- 電影行業(yè)在線(xiàn)選座購(gòu)票系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)方案
- 家居裝修行業(yè)智能設(shè)計(jì)與裝修管理方案
- 技改項(xiàng)目可行性報(bào)告
- 家庭太陽(yáng)能光伏發(fā)電
- 施工安全保障措施方案
- 新興文化消費(fèi)市場(chǎng)發(fā)展趨勢(shì)研究報(bào)告
- 三農(nóng)村合作社碳排放減少方案
- 乳制品行業(yè)風(fēng)味發(fā)酵乳生產(chǎn)技術(shù)研究與開(kāi)發(fā)方案
- 山東省淄博市、濱州市2025屆高三一模語(yǔ)文試題及答案解析
- 2024山西三支一扶真題及答案
- 2025年阜陽(yáng)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫(kù)有答案
- 手術(shù)十大安全管理目標(biāo)
- 2025年1月時(shí)事政治考試100題及參考答案
- 實(shí)施“教聯(lián)體”賦能共同體 打造校家社協(xié)同育人新模式
- 六年級(jí)下冊(cè)快樂(lè)讀書(shū)吧外國(guó)名著閱讀練習(xí)《魯濱遜漂流》《湯姆索亞歷險(xiǎn)記》《騎鵝旅行記》答案
- 2025年哈爾濱電力職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)完整版
- 帶貨主播簽約合同范本
- 醫(yī)院安保服務(wù)投標(biāo)方案醫(yī)院保安服務(wù)投標(biāo)方案(技術(shù)方案)
- 中醫(yī)理療免責(zé)協(xié)議書(shū)
評(píng)論
0/150
提交評(píng)論