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

下載本文檔

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

文檔簡介

高級編程技術(shù)

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

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

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

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

例:

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

FileAccess.ReadWrite,

FileShare.Read);

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

if(!File.Exists("c:\\abc2.txt")){File.Copy(@"c:\abcd\abc.txt","c:\\abc2.txt");}§10.4文本文件讀寫File類除了文件管理功能也提供了豐富的文本文件的靜態(tài)類讀寫方法,不需要實例化即可以調(diào)用File方法。FileStream類、StreamWriter與StreamReader類提供了按文本讀寫數(shù)據(jù)的實例化方法,也具有文件管理方法。讀寫文本文件方法很多,參見MSDN。以File靜態(tài)類的方法讀寫文本文件:1、字符串讀寫或追加到文本文件2、字符串數(shù)組讀寫到文本文件3、字節(jié)數(shù)組讀寫到文本文件以StreamWriter與StreamReader類實例化對象,以行為單位讀寫文本文件:4、以行為單位讀寫到文本文件1、字符串讀寫或追加到文本文件File.WriteAllText(String,String,Encoding)方法:創(chuàng)建或覆蓋一個文件,寫入字符串,然后關(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)方法:打開一個文件,使用指定的編碼讀取文件的所有行,然后關(guān)閉該文件。stringpath=@"c:\MyTest.txt";stringreadText=File.ReadAllText(path,Encoding.UTF8);textBox1.Text=readText;2、字符串數(shù)組讀寫到文本文件File.WriteAllLines方法(String,String[],Encoding)方法:創(chuàng)建或覆蓋一個文件,寫入字符串數(shù)組,然后關(guān)閉文件。stringpath=@"c:\MyTest.txt";string[]createText={"Hello","And","Welcome"};File.WriteAllLines(path,createText,Encoding.UTF8);File.ReadAllLines(String,Encoding)方法:打開一個文本文件,將文件的所有行都讀入一個字符串數(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ù)組讀寫到文本文件File.WriteAllBytes(String,byte[])方法:創(chuàng)建或覆蓋一個文件,寫字節(jié)數(shù)組(ASCII碼),然后關(guān)閉該文件。stringpath=@"c:\MyTest.txt";byte[]createText={65,66,97,98};File.WriteAllBytes(path,createText);

File.ReadAllBytes(path)

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

}StreamReader.ReadLine()方法:從當前流中讀取一行字符作為字符串返回。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二進制文件讀寫B(tài)inaryWriter和BinaryReader類用于實例化的方法讀取和寫入二進制數(shù)據(jù)。這兩個對象都先需要FileStream創(chuàng)建流。文件指針:文件打開后會產(chǎn)生一個指針,指向文件頭;隨著數(shù)據(jù)讀寫,它自動指向下一次要讀寫的數(shù)據(jù)位置,通過指令也可改變指針位置。BinaryWriter常用方法:Close關(guān)閉當前的BinaryWriter和基礎(chǔ)流。Equals

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

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

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

;用BinaryWriter以流fstream為參數(shù)實例化www流;www.Write方法將整數(shù)0到10值寫入當前流。BinaryWriter每次寫入都將文件指針置于文件尾。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();}二進制文件讀寫舉例BinaryReader讀二進制文件步驟:用FileStream創(chuàng)建c:\MyTest.dat文件的流對象fstream

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

方法從當前流中讀取4字節(jié)無符號整數(shù)并使流的當前指針位置加4個字節(jié)。每次寫入都將文件指針置于文件尾。Close()Read()ReadDecimal()ReadByte()ReadInt16()ReadInt32()ReadString()BinaryReaderBinaryReader讀二進制文件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. 本站所有資源如無特殊說明,都需要本地電腦安裝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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論