C#第10章 文件操作2H_第1頁(yè)
C#第10章 文件操作2H_第2頁(yè)
C#第10章 文件操作2H_第3頁(yè)
C#第10章 文件操作2H_第4頁(yè)
C#第10章 文件操作2H_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

高級(jí)編程技術(shù)

—VisualC#.NETProgramming聊城大學(xué)?

理工學(xué)院曹銀杰caoyinjie@/zh-cn/library/default.aspx第十章文件操作§10.1文件操作概念§10.2目錄管理§10.3文件管理-File類§10.4文本文件讀寫(xiě)§10.5二進(jìn)制文件讀寫(xiě)§10.6內(nèi)存流操作MemoryStream§10.1文件操作概念文件File:是一些具有永久存儲(chǔ)及特定順序的字節(jié)組成的一個(gè)有序的、具有名稱的集合。文件的三種分類方法:(1)按內(nèi)容分分為文本文件與二進(jìn)制文件;(2)按存取方式分為順序文件與隨機(jī)文件;(3)按輸出方式分磁盤(pán)文件與設(shè)備文件(如打印機(jī))。文件管理是操作系統(tǒng)的一個(gè)重要組成部分,而文件操作就是用戶在編寫(xiě)應(yīng)用程序時(shí)進(jìn)行文件管理的一種手段。關(guān)于文件常會(huì)想到磁盤(pán)、路徑、文件名等。在DOS、Windows操作系統(tǒng)中的FAT、FAT32、NTFS等文件系統(tǒng),在操作系統(tǒng)內(nèi)部實(shí)現(xiàn)時(shí)有不同的方式,但它們提供給用戶的接口是一致的,因此在編寫(xiě)對(duì)文件操作的代碼時(shí)不需要考慮具體的實(shí)現(xiàn)方式,只需要利用語(yǔ)言環(huán)境提供的外部接口即可。文件操作概念C#提供了強(qiáng)大的文件操作功能,利用.NET環(huán)境所提供的功能實(shí)現(xiàn)文件的存儲(chǔ)管理、讀寫(xiě)等各種操作。文件是存儲(chǔ)在存儲(chǔ)介質(zhì)上的數(shù)據(jù)集,是靜態(tài)的,它具有名稱和相應(yīng)的路徑。當(dāng)打開(kāi)一個(gè)文件并對(duì)其進(jìn)行讀寫(xiě)時(shí),該文件就成為動(dòng)態(tài)的流(stream)。流提供一種向后備存儲(chǔ)寫(xiě)入或讀取字節(jié)的一種方式,除了和磁盤(pán)文件直接相關(guān)的文件流以外,流有多種類型,流可以分布在網(wǎng)絡(luò)中、內(nèi)存中、鍵盤(pán)輸入、文本顯示或者是磁帶中。流是進(jìn)行數(shù)據(jù)讀取操作的基本對(duì)象。流為用戶提供了連續(xù)的字節(jié)流存儲(chǔ)空間,雖然數(shù)據(jù)實(shí)際存儲(chǔ)的位置可以不連續(xù)甚至可以分布在多個(gè)磁盤(pán)上,但人們看到的是封裝以后的數(shù)據(jù)結(jié)構(gòu),是連續(xù)的字節(jié)流抽象結(jié)構(gòu)。文件操作概念在.NETFramework中,System.IO命名空間主要包含基于文件(和基于內(nèi)存)的輸入輸出(I/O)服務(wù)的相關(guān)基類庫(kù)。System.IO提供了一個(gè)抽象類Stream,表示對(duì)所有流的抽象,既然Stream是抽象類,所有其他流的類就都必須從Stream類中繼承,從而封裝了操作系統(tǒng)和底層存儲(chǔ)的各個(gè)細(xì)節(jié),使程序員把注意力集中到程序的應(yīng)用邏輯上來(lái)。其中FileStream類:表示文件流,按照字節(jié)方式對(duì)流進(jìn)行讀寫(xiě),對(duì)文件的操作,實(shí)際上就是對(duì)文件流的操作。MemoryStream類:創(chuàng)建其支持存儲(chǔ)區(qū)為內(nèi)存的流。BufferStream類:將流添加到緩沖區(qū),進(jìn)行讀、寫(xiě)操作。引入命名空間:usingSystem.IO;System.IO命名空間類成員System.IO命名空間枚舉成員DriveType定義驅(qū)動(dòng)器類型常數(shù),包括CDRom、Fixed、Network、NoRootDirectory、Ram、Removable和Unknown。FileAccess定義用于控制對(duì)文件的讀訪問(wèn)、寫(xiě)訪問(wèn)或讀/寫(xiě)訪問(wèn)的常數(shù)。FileAttributes提供文件和目錄的屬性。FileMode指定操作系統(tǒng)打開(kāi)文件的方式。FileOptions表示用于創(chuàng)建FileStream對(duì)象的附加選項(xiàng)。FileShare包含用于控制其他FileStream對(duì)象對(duì)同一文件可以具有的訪問(wèn)類型的常數(shù)。NotifyFilters指定要在文件或文件夾中監(jiān)視的更改。SearchOption指定是搜索當(dāng)前目錄,還是搜索當(dāng)前目錄及其所有子目錄。SeekOrigin提供表示流中的參考點(diǎn)以供進(jìn)行查找的字段。WatcherChangeTypes可能會(huì)發(fā)生的文件或目錄更改。§10.2目錄管理Directory靜態(tài)類、Path靜態(tài)類的方法或DirectoryInfo類實(shí)例實(shí)現(xiàn)目錄的創(chuàng)建、移動(dòng)和刪除等目錄管理。以Directory靜態(tài)類為例介紹:Directory類的CreateDirectory、Delete方法創(chuàng)建刪除文件夾:Privatevoidbutton1_Click(objectsender,EventArgse){

//注意轉(zhuǎn)義字符

\、

@用法

stringpathabc="c:\\abc";Directory.CreateDirectory(pathabc);Directory.CreateDirectory(@"c:\abc\123");Directory.Delete("c:\\abc\\123");//只能刪空目錄

}Directory類的方法Exists方法判斷文件夾是否存在:Privatevoidbutton2_Click(objectsender,EventArgse){if(Directory.Exists("c:\\abcd")){textBox1.Text="DirectoryabcdExists!";}else{textBox1.Text="DirectoryabcdNotExists!";}

}GetCurrentDirectory方法獲取當(dāng)前工作目錄:stringpath=Directory.GetCurrentDirectory();textBox1.Text=path;Directory類的方法Move方法,移動(dòng)文件夾:Directory.CreateDirectory("c:\\abcd");Directory.Move("c:\\abcd","c:\\abc\\abcdd");GetDirectories方法,取得指定目錄中的子目錄名稱(包括路徑):string[]subdirectoryEntries=Directory.GetDirectories(targetDirectory);GetFiles方法,返回指定目錄中的文件的名稱:string[]fileEntries=Directory.GetFiles(targetDirectory);§10.3文件管理-File類File類提供了一系列靜態(tài)方法對(duì)文件進(jìn)行文件的創(chuàng)建、復(fù)制、刪除、移動(dòng)和打開(kāi)、讀寫(xiě)等操作。也可以用FileInfo類實(shí)例方法進(jìn)行文件管理。以下是File類的方法為例:Create方法創(chuàng)建文件:privatevoidbutton1_Click(objectsender,EventArgse){Directory.CreateDirectory("c:\\abcd");File.Create("c:\\abcd\\abc.txt");

}//文件創(chuàng)建后也就打開(kāi)了Delete方法刪除未打開(kāi)的文件:

File.Delete("c:\\abcd\\abc.txt");Open方法打開(kāi)指定路徑上的文件,有讀/寫(xiě)方式(追加、覆蓋等)、訪問(wèn)權(quán)限、共享可選項(xiàng),選項(xiàng)都是枚舉常量。語(yǔ)法:File.Open(String,FileMode,FileAccess,FileShare)

例:

File.Open("c:\\abcd\\abc.txt",FileMode.Create,

FileAccess.ReadWrite,

FileShare.Read);

文件管理Copy方法復(fù)制文件(同時(shí)可改名):File.Copy(sourceFileName,destFileName,booloverwrite);例:File.Copy(@"c:\abcd\\abc.txt","c:\\abc2.txt",true);Move方法移動(dòng)文件(同時(shí)可改名):File.Move(sourceFileName,destFileName);Exists方法判斷文件是否存在避免程序出錯(cuò):語(yǔ)法:File.Exists(stringpath);

if(!File.Exists("c:\\abc2.txt")){File.Copy(@"c:\abcd\abc.txt","c:\\abc2.txt");}§10.4文本文件讀寫(xiě)File類除了文件管理功能也提供了豐富的文本文件的靜態(tài)類讀寫(xiě)方法,不需要實(shí)例化即可以調(diào)用File方法。FileStream類、StreamWriter與StreamReader類提供了按文本讀寫(xiě)數(shù)據(jù)的實(shí)例化方法,也具有文件管理方法。讀寫(xiě)文本文件方法很多,參見(jiàn)MSDN。以File靜態(tài)類的方法讀寫(xiě)文本文件:1、字符串讀寫(xiě)或追加到文本文件2、字符串?dāng)?shù)組讀寫(xiě)到文本文件3、字節(jié)數(shù)組讀寫(xiě)到文本文件以StreamWriter與StreamReader類實(shí)例化對(duì)象,以行為單位讀寫(xiě)文本文件:4、以行為單位讀寫(xiě)到文本文件1、字符串讀寫(xiě)或追加到文本文件File.WriteAllText(String,String,Encoding)方法:創(chuàng)建或覆蓋一個(gè)文件,寫(xiě)入字符串,然后關(guān)閉文件。stringpath=@"c:\MyTest.txt";File.WriteAllText(path,"

你好!",

Encoding.UTF8);File.AppendAllText(String,String,Encoding)方法:字符串追加到文件中。stringcreateText="hello!"+Environment.NewLine;File.AppendAllText(path,createText);File.ReadAllText(String,Encoding)方法:打開(kāi)一個(gè)文件,使用指定的編碼讀取文件的所有行,然后關(guān)閉該文件。stringpath=@"c:\MyTest.txt";stringreadText=File.ReadAllText(path,Encoding.UTF8);textBox1.Text=readText;2、字符串?dāng)?shù)組讀寫(xiě)到文本文件File.WriteAllLines方法(String,String[],Encoding)方法:創(chuàng)建或覆蓋一個(gè)文件,寫(xiě)入字符串?dāng)?shù)組,然后關(guān)閉文件。stringpath=@"c:\MyTest.txt";string[]createText={"Hello","And","Welcome"};File.WriteAllLines(path,createText,Encoding.UTF8);File.ReadAllLines(String,Encoding)方法:打開(kāi)一個(gè)文本文件,將文件的所有行都讀入一個(gè)字符串?dāng)?shù)組,后關(guān)閉文件。

stringpath=@"c:\MyTest.txt";string[]readText=File.ReadAllLines(path,Encoding.UTF8);

//textBox1.Text=readText[1];foreach(stringsinreadText){

textBox1.Text+=s;

}3、字節(jié)數(shù)組讀寫(xiě)到文本文件File.WriteAllBytes(String,byte[])方法:創(chuàng)建或覆蓋一個(gè)文件,寫(xiě)字節(jié)數(shù)組(ASCII碼),然后關(guān)閉該文件。stringpath=@"c:\MyTest.txt";byte[]createText={65,66,97,98};File.WriteAllBytes(path,createText);

File.ReadAllBytes(path)

方法:打開(kāi)文件,以字節(jié)形式都讀入一個(gè)字節(jié)數(shù)組,然后關(guān)閉該文件。stringpath=@"c:\MyTest.txt";byte[]readText=File.ReadAllBytes(path);foreach(bytesinreadText){textBox1.Text+=s;}4、以行為單位讀寫(xiě)到文本文件StreamWriter.WriteLine(String)方法:向當(dāng)前流中寫(xiě)一行字符。privatevoidbutton1_Click(objectsender,EventArgse){stringFILE_NAME=@"c:\MyTest.txt";using(StreamWritersw=newStreamWriter(FILE_NAME)){sw.WriteLine("以行為單位");sw.WriteLine("讀寫(xiě)到文本文件");sw.WriteLine("你看,共三行")}//注意using用法,sw對(duì)象初始化時(shí)寫(xiě)的參數(shù)。

}StreamReader.ReadLine()方法:從當(dāng)前流中讀取一行字符作為字符串返回。privatevoidbutton2_Click(objectsender,EventArgse){stringFILE_NAME=@"c:\MyTest.txt";

StreamReadersr=newStreamReader(FILE_NAME))

while(sr.Peek()>=0){textBox1.Text+=sr.ReadLine()+Environment.NewLine;}

sr.Close();

}§10.5二進(jìn)制文件讀寫(xiě)B(tài)inaryWriter和BinaryReader類用于實(shí)例化的方法讀取和寫(xiě)入二進(jìn)制數(shù)據(jù)。這兩個(gè)對(duì)象都先需要FileStream創(chuàng)建流。文件指針:文件打開(kāi)后會(huì)產(chǎn)生一個(gè)指針,指向文件頭;隨著數(shù)據(jù)讀寫(xiě),它自動(dòng)指向下一次要讀寫(xiě)的數(shù)據(jù)位置,通過(guò)指令也可改變指針位置。BinaryWriter常用方法:Close關(guān)閉當(dāng)前的BinaryWriter和基礎(chǔ)流。Equals

確定兩個(gè)Object實(shí)例是否相等。Flush清理當(dāng)前編寫(xiě)器的所有緩沖區(qū),使所有緩沖數(shù)據(jù)寫(xiě)入基礎(chǔ)設(shè)備。GetType

獲取當(dāng)前實(shí)例的Type。Seek設(shè)置當(dāng)前流中的位置。ToString

返回表示當(dāng)前Object的String。Write已重載。將值寫(xiě)入當(dāng)前流。二進(jìn)制文件讀寫(xiě)舉例BinaryWriter向空文件流(MyTest.data)寫(xiě)入數(shù)據(jù)步驟:用FileStream創(chuàng)建c:\MyTest.dat文件的流對(duì)象fstream

;用BinaryWriter以流fstream為參數(shù)實(shí)例化www流;www.Write方法將整數(shù)0到10值寫(xiě)入當(dāng)前流。BinaryWriter每次寫(xiě)入都將文件指針置于文件尾。privatevoidbutton1_Click(objectsender,EventArgse)

{stringFILE_NAME=@"c:\MyTest.dat";

FileStreamfstream=newFileStream(FILE_NAME,FileMode.Create);BinaryWriterwww=newBinaryWriter(fstream);for(inti=0;i<11;i++){www.Write((int)i);}//www.Seek(32,SeekOrigin.Begin);//改變指針位置

//www.Write(888);www.Close();fstream.Close();}二進(jìn)制文件讀寫(xiě)舉例BinaryReader讀二進(jìn)制文件步驟:用FileStream創(chuàng)建c:\MyTest.dat文件的流對(duì)象fstream

;用BinaryReader以流fstream為參數(shù)實(shí)例化rrr流;rrr.ReadInt32()

方法從當(dāng)前流中讀取4字節(jié)無(wú)符號(hào)整數(shù)并使流的當(dāng)前指針位置加4個(gè)字節(jié)。每次寫(xiě)入都將文件指針置于文件尾。Close()Read()ReadDecimal()ReadByte()ReadInt16()ReadInt32()ReadString()BinaryReaderBinaryReader讀二進(jìn)制文件privatevoidbutton2_Click(objectsender,EventArgse){stringFILE_NAME=@"c:\MyTest.dat";FileStreamfstream=newFileStream(FILE_NAME,FileMode.Open,FileAccess.Read);BinaryReaderrrr=newBinaryReader(fstream);for(inti=0;i<11;i++){textBox1.Text+=rrr.ReadInt32();}

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論