《ASP.NET4.0程序設(shè)計案例教程》課件-第6章文件操作_第1頁
《ASP.NET4.0程序設(shè)計案例教程》課件-第6章文件操作_第2頁
《ASP.NET4.0程序設(shè)計案例教程》課件-第6章文件操作_第3頁
《ASP.NET4.0程序設(shè)計案例教程》課件-第6章文件操作_第4頁
《ASP.NET4.0程序設(shè)計案例教程》課件-第6章文件操作_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第6章文件操作本章學(xué)習(xí)目標(biāo)System.IO模型文件夾和文件操作FileStream類文本文件的操作二進(jìn)制文件操作序列化和反序列化6.1System.IO模型

6.1.1文件編碼6.1.2C#的文件流6.1.1文件編碼文件編碼也稱為字符編碼,用于指定在處理文本時如何表示字符。一種編碼可能優(yōu)于另一種編碼,主要取決于它能處理或不能處理哪些語言字符,不過通常首選的是Unicode。編碼是一個將一組Unicode字符轉(zhuǎn)換為一個字節(jié)序列的過程;解碼是一個反向過程。System.IO模型中,Encoding類用于字符編碼。6.1.2C#的文件流文件是在各種媒質(zhì)上(可移動磁盤、硬盤和光盤等)永久存儲的數(shù)據(jù)的有序集合。它是一種進(jìn)行數(shù)據(jù)讀寫操作的基本對象。流是字節(jié)序列的抽象概念,例如文件、輸入輸出設(shè)備、內(nèi)部進(jìn)程通信管道或者TCP/IP套接字等均可以看成流。流也是進(jìn)行數(shù)據(jù)讀取操作的基本對象,流提供了連續(xù)的字節(jié)流存儲空間。C#將文件看成是順序的字節(jié)流,也稱為文件流。C#用文件流對文件進(jìn)行輸入、輸出操作。C#提供Stream類(System.IO成員)是所有流的基類,由它派生出文件流FileStream和緩沖區(qū)流BufferedStream。6.2文件夾管理

6.2.1DirectoryInfo類6.2.2Directory類6.2.3文件夾的相關(guān)操作6.2文件夾管理在System.IO命名空間中,.NET框架提供了Directory類和DirectoryInfo類。這兩個類均可用于對磁盤和目錄進(jìn)行操作管理,如復(fù)制、移動、重命名、創(chuàng)建和刪除目錄,獲取和設(shè)置與目錄的創(chuàng)建、訪問及寫入操作相關(guān)的時間信息。DirectoryInfo類與Directory類的不同點(diǎn)在于DirectoryInfo類必須被實(shí)例化后才能使用,而Directory類則只提供了靜態(tài)的方法。實(shí)際編程中,如果多次使用某個對象,一般用DirectoryInfo類;如果僅執(zhí)行某一個操作,則使用Directory類提供的靜態(tài)方法效率更高一些。6.2.1DirectoryInfo類DirectoryInfo類的基本構(gòu)造函數(shù)形式如下:publicDirectoryInfo(stringpath)參數(shù)path表示目錄所在的路徑。DirectoryInfo類的主要屬性和方法見教材表6-1、表6-2。6.2.2Directory類Directory類的靜態(tài)方法見教材表6-3。6.2.3文件夾的相關(guān)操作1.文件夾的創(chuàng)建Directory類的CreateDirectory方法用于創(chuàng)建指定路徑中的所有目錄。方法原型為:publicstaticDirectoryInfoCreateDirectory(stringpath),其中參數(shù)path為要創(chuàng)建的目錄路徑。如果指定的目錄不存在,程序中調(diào)用該方法后,系統(tǒng)會按path指定的路徑創(chuàng)建所有目錄和子目錄。例如,在C盤根目錄下創(chuàng)建一個名為test的目錄代碼為:Directory.CreateDirectory(“c:\\test”);使用CreateDirectory方法創(chuàng)建多級子目錄時,也可以直接指定路徑,例如,同時創(chuàng)建test目錄和其下的t1一級子目錄和t2二級子目錄的代碼為:Directory.CreateDirectory(“c:\\test\\t1\\t2”);6.2.3文件夾的相關(guān)操作2.文件夾的刪除Directory類的Delete方法用于刪除指定的目錄,該方法有下列兩種重載的形式。1) publicstaticvoidDelete(stringpath)參數(shù)path為要移除的空目錄的名稱。path參數(shù)不區(qū)分大小寫,可以是相對于當(dāng)前工作目錄的相對路徑,也可以是絕對路徑。注意:此目錄必須為空才可以刪除,否則將會引發(fā)異常。2) publicstaticvoidDelete(stringpath,boolrecursive)參數(shù)path為要移除的目錄的名稱,不區(qū)分大小寫;recursive是一個布爾值,若要移除path中的目錄、子目錄和文件,則為true;否則為false。例如,刪除C盤根目錄下的test目錄,且test目錄為空的代碼如下:

Directory.Delete(“c:\\test”);

刪除C盤根目錄下的test目錄,且移除test目錄中的子目錄和文件,代碼如下:Directory.Delete(“c:\\test”,true);6.2.3文件夾的相關(guān)操作3.文件夾的移動Directory類的Move方法能夠重命名或移動文件夾。方法原型為:

publicstaticvoidMove(stringsourceDirName,stringdestDirName)其中,sourceDirName為要移動的文件或目錄的路徑;destDirName為指向sourceDirName的新位置的目標(biāo)路徑。如要將“c:\mydir”文件夾移動到“c:\public”,代碼如下:Directory.Move(“c:\\mydir”,“c:\\public”);注意:destDirName參數(shù)指定的目標(biāo)路徑應(yīng)為新目錄。如將“c:\mydir”移動到“c:\public”,并且“c:\public”已存在,則此方法會引發(fā)IOException異常。6.3文件管理

6.3.1FileInfo類6.3.2File類6.3.3文件的屬性和設(shè)置6.3文件管理在System.IO命名空間中提供了多種類,用于進(jìn)行文件和數(shù)據(jù)流的讀寫操作。要使用這些類,需要在程序的開頭包含語句:usingSystem.IO。其中File類和FileInfo類通常用來完成文件的創(chuàng)建、刪除、拷貝、移動、打開等操作。File類和FileInfo類為文件的創(chuàng)建、復(fù)制、移動、刪除、打開等提供了支持。使用File類和FileInfo類對文件進(jìn)行操作時,用戶必須具備相應(yīng)的權(quán)限,如讀、寫等權(quán)限,否則將會引發(fā)異常。FileInfo類與File類均能完成對文件的操作,不同點(diǎn)在于FileInfo類必須被實(shí)例化,并且每個FileInfo的實(shí)例必須對應(yīng)于系統(tǒng)中一個實(shí)際存在的文件。由于所有File類提供的方法都是靜態(tài)的,所以如果只想執(zhí)行一個操作,使用File方法的效率比使用相應(yīng)的FileInfo實(shí)例方法可能更高。如果打算多次重用某個對象,可考慮使用FileInfo的實(shí)例方法。6.3.1FileInfo類FileInfo類的構(gòu)造函數(shù)形式如下:publicFileInfo(stringfileName)參數(shù)fileName表示新文件的完全限定名或相對文件名。FileInfo類的主要屬性和方法見教材表6-4、表6-5。6.3.2File類File類的主要靜態(tài)方法見教材表6-6。6.3.3文件的屬性和設(shè)置FileAttributes枚舉用于獲取或設(shè)置目錄或文件的屬性,部分枚舉值見教材表6-7。6.3.4文件的相關(guān)操作1.文件的創(chuàng)建File類的Create方法用于創(chuàng)建或覆蓋指定路徑的文件,該方法的原型為:publicstaticFileStreamCreate(stringpath),其中path參數(shù)指定相對或絕對路徑信息。相對路徑信息是指相對于當(dāng)前工作目錄。方法的返回類型為FileStream,以便于對文件進(jìn)行進(jìn)一步的讀寫操作。該方法重載的方法有:publicstaticFileStreamCreate(String,Int32) 創(chuàng)建或覆蓋指定緩沖區(qū)大小的文件。publicstaticFileStreamCreate(String,Int32,FileOptions) 創(chuàng)建或覆蓋指定的文件,并指定緩沖區(qū)大小和一個描述如何創(chuàng)建或覆蓋該文件的FileOptions值。publicstaticFileStreamCreate(String,Int32,FileOptions,FileSecurity) 創(chuàng)建或覆蓋具有指定的緩沖區(qū)大小、文件選項(xiàng)和文件安全性的指定文件。因此,此方法等效于使用默認(rèn)緩沖區(qū)大小的Create(String,Int32)方法重載。如果指定的文件不存在,則創(chuàng)建該文件;如果存在并且不是只讀的,則將覆蓋其內(nèi)容。默認(rèn)情況下,將向所有用戶授予對新文件的完全讀/寫訪問權(quán)限。文件是用讀/寫訪問權(quán)限打開的,必須關(guān)閉后才能由其他應(yīng)用程序打開。6.3.4文件的相關(guān)操作2.文件的打開File類的Open方法用于打開指定路徑的文件,該方法的原型為:publicstaticFileStreamOpen(stringpath,FileMode),其中path參數(shù)指定相對或絕對路徑信息。FileMode參數(shù)是枚舉類型,用于指定打開文件的方式,取值可以是FileMode.Create,FileMode.Open,FileMode.OpenOrCreate,FileMode.Truncate,FileMode.Append等。方法的返回類型為FileStream,以便于對文件進(jìn)行進(jìn)一步的讀寫操作。該方法重載的方法有:publicstaticFileStreamOpen(String,FileMode,FileAccess) 以指定的模式和訪問權(quán)限打開指定路徑上的文件。publicstaticFileStreamOpen(String,FileMode,FileAccess,FileShare) 打開指定路徑上的文件,具有指定的讀、寫或讀/寫訪問模式以及指定的共享選項(xiàng)。6.3.4文件的相關(guān)操作3.文件的復(fù)制File類的Copy方法用于打開指定路徑的文件,該方法的原型為:publicstaticvoidCopy(stringsourceFileName,stringdestFileName,booloverwrite),復(fù)制參數(shù)sourceFileName指定的文件,新文件的路徑及名稱為destFileName,參數(shù)overwrite用來指定當(dāng)目的文件已存在時是否覆蓋原來的文件,若省略不寫,表示為默認(rèn)值False。該方法重載的方法有:publicstaticvoidCopy(stringsourceFileName,stringdestFileName),將現(xiàn)有文件復(fù)制到新文件且不允許覆蓋同名的文件。6.3.4文件的相關(guān)操作4.文件的刪除File類的Delete方法用于刪除指定路徑的文件,該方法的原型為:publicstaticvoidDelete(stringpath),刪除參數(shù)path指定的文件。5.文件的移動File類的Delete方法用于刪除指定路徑的文件,該方法的原型為:publicstaticvoidMove(stringsourceFileName,stringdestFileName);將參數(shù)sourceFileName指定的源文件移動至參數(shù)destFileName指定的目標(biāo)位置,移動后的文件名稱可以和源文件不同,請注意,文件夾無法跨磁盤移動,但文件可以。如果嘗試通過將一個同名文件移到該目錄中來替換文件,將發(fā)生IOException。不能使用Move方法覆蓋現(xiàn)有文件。允許sourceFileName和destFileName參數(shù)指定相對或絕對路徑信息。相對路徑信息被解釋為相對于當(dāng)前工作目錄。若要獲取當(dāng)前工作目錄,可以使用Directory.GetCurrentDirectory()方法。6.4文件讀寫

6.4.1FileStream類6.4.2文本文件讀寫6.4.3二進(jìn)制文件的讀寫6.4.1FileStream類FileStream類可以對文件系統(tǒng)上的文件進(jìn)行讀取、寫入、打開合關(guān)閉操作,也可以對其他與文件相關(guān)的操作系統(tǒng)句柄進(jìn)行操作,如管道、標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出。由于FileStream能夠?qū)斎胼敵鲞M(jìn)行緩沖,因此可以提高系統(tǒng)的性能。使用FileStream類的構(gòu)造函數(shù),構(gòu)造函數(shù)列表見表6-8FileStream對象的主要屬性,屬性列表見表6-9。FileStream對象的操作,主要的方法列表見表6-10。相關(guān)類型說明如表6-11、表6-12、表6-13所示。6.4.2文本文件讀寫1. 讀取文本文件使用StreamReader類的對象來完成對文本文件的讀取1)StreamReader類構(gòu)造函數(shù),主要構(gòu)造函數(shù)列表見表6-14。2)StreamReader類常用方法(1)Read方法

Read方法用于讀取輸入流中的下一個字符,并使當(dāng)前流的位置提升一個字符。(2)ReadLine方法

ReadLine方法從當(dāng)前流中讀取一行字符并將數(shù)據(jù)作為字符串返回。6.4.2文本文件讀寫2. 寫入文本文件:使用StreamWriter類的對象來完成對文本文件的寫入1)StreamWriter類構(gòu)造函數(shù),主要構(gòu)造函數(shù)列表見表6-15。2)StreamWriter類常用方法(1)Write方法Write方法用于將字符、字符數(shù)組、字符串等寫入流,不換行。(2)WriteLine方法WriteLine方法用于將后跟行結(jié)束符的字符、字符數(shù)組、字符串等寫入文本流。一行一行寫。6.4.3二進(jìn)制文件的讀寫System.IO還提供了BinaryReader和BinaryWriter類,用于按二進(jìn)制模式讀寫文件。它們提供的一些讀寫方法是對稱的,如針對不同的數(shù)據(jù)結(jié)構(gòu),BinaryReader提供了ReadByte、ReadBoolean、ReadInt、ReadInt16、ReadDouble和ReadString等方法,而BinaryWriter則提供了WriteByte、WriteBoolean、WriteInt、WriteInt16、WriteDouble和WriteString方法。6.5序列化和反序列化

6.5.1序列化的作用6.5.2序列化及反序列化的實(shí)現(xiàn)6.5.1序列化的作用通過將對象進(jìn)行序列化,可以將對象的狀態(tài)保持在存儲媒體中,以便可以在以后重新創(chuàng)建精確的副本。另外一個主要的作用是通過值將對象從一個應(yīng)用程序域發(fā)送到另一個應(yīng)用程序域中。6.5.2序列化及反序列化的實(shí)現(xiàn)要實(shí)現(xiàn)對象的序列化,首先要保證該對象可以序列化。而且,序列化只是將對象的屬性進(jìn)行有效的保存,對于對象的一些方法則無法實(shí)現(xiàn)序列化的。實(shí)現(xiàn)一個類可序列化的最簡便的方法就是增加Serializable屬性標(biāo)記類。6.5.2序列化及反序列化的實(shí)現(xiàn)XML序列化使用XmLSerializer類,可將下列項(xiàng)序列化。公共類的公共讀/寫屬性和字段實(shí)現(xiàn)ICollection或IEnumerable的類。(注意只有集合會被序列化,而公共屬性卻不會。)XmlElement對象。XmlNode對象。DataSet對象。6.5.2序列化及反序列化的實(shí)現(xiàn)二進(jìn)制序列化與XML序列化不同的是,二進(jìn)制序列化可以將類的實(shí)例中所有字段(包括私有和公有)都進(jìn)行序列化操作。這就更方便、更準(zhǔn)確的還原了對象的副本。6.6案例分析

本章的案例為通過ASP.NET網(wǎng)站及WebService技術(shù)實(shí)現(xiàn)圖片文件的上傳和下載功能。1、設(shè)計思路通過ASP.NET網(wǎng)站,向另外一個WebService發(fā)送請求,實(shí)現(xiàn)圖片文件的上傳和下載。WebService應(yīng)該提供2個WebMethod,用于接收ASP.NET網(wǎng)站傳輸?shù)淖止?jié)數(shù)組(流)以及向ASP.NET網(wǎng)站傳輸字節(jié)數(shù)組(流)。6.6案例分析

2. 網(wǎng)站設(shè)計(1) 在VisualStudio2010中創(chuàng)建一個空的網(wǎng)站W(wǎng)ebSite1。(2) 在網(wǎng)站中添加一個新的Web窗體,窗體文件名稱為:Default.aspx。(3) 為窗體Default.aspx添加1個文件上傳控件FileUpload1,2個按鈕控件Button1和Button2,1個文本框控件TextBox1。并設(shè)置Button1的文本為:“上傳”,Button2的文本為:“下載”。6.6案例分析

(4) 再次打開VisualStudio2010,重新創(chuàng)建一個空的網(wǎng)站W(wǎng)ebSite2。在網(wǎng)站中添加一個新的Web服務(wù)(ASMX),Web服務(wù)文件名稱為:FileService.asmx在網(wǎng)站W(wǎng)ebSite2的根目錄下添加一個文件夾“images”,用于存放接收到的上傳圖片。6.6案例分析

3. 代碼實(shí)現(xiàn)1) 在WebSite2中的FileService.asmx.cs文件中添加2個WebMethod,代碼如下:

[WebMethod(Description="上傳服務(wù)器圖片信息,返回是否成功")]publicstringUploadImage(byte[]fs,stringfileName){//創(chuàng)建內(nèi)存流,將數(shù)組寫入內(nèi)存流中

MemoryStreammemory=newMemoryStream(fs);//根據(jù)傳入的文件名稱,生成FileStreamFileStreamstream=newFileStream(HttpContext.Current.Server.MapPath(".")+"http://images//"+fileName,FileMode.Create);//將內(nèi)存流的內(nèi)容寫入FileStream流中

memory.WriteTo(stream); //關(guān)閉文件流

stream.Close(); //釋放相關(guān)的資源

memory=null;stream=null;return"文件上傳成功!";}6.6案例分析

[WebMethod(Description="Web服務(wù)提供的方法,返回給定文件的字節(jié)數(shù)組")]publicbyte[]GetImage(stringrequestFileName){FileStreamfs=null; //得到服務(wù)器端存放圖片的文件目錄

stringCurrentUploadFolderPath=HttpContext.Current.Server.MapPath(".")+"http://images//"; //得到要下載的文件在服務(wù)器端的路徑

stringCurrentUploadFilePath=CurrentUploadFolderPath+requestFileName;if(File.Exists(CurrentUploadFilePath)){try{///打開現(xiàn)有文件以進(jìn)行讀取。

fs=File.OpenRead(CurrentUploadFilePath);intb1; //創(chuàng)建內(nèi)存流,用于存放讀取到的圖片內(nèi)容

MemoryStreamtempStream=newSystem.IO.MemoryStream(); //循環(huán)讀取圖片文件中的字節(jié),直到讀到文件結(jié)束為止6.6案例分析

while((b1=fs.ReadByte())!=-1){tempStream.WriteByte(((byte)b1));} //返回內(nèi)存流中的字節(jié)數(shù)組(即圖片文件內(nèi)容)returntempStream.ToArray();}catch(Exceptionex){ //出現(xiàn)異常,返回byte[0]returnnewbyte[0];}finally{ //關(guān)閉文件流

fs.Close();}}else{ //文件不存在,返回byte[0]returnnewbyte[0];}}6.6案例分析

2) 在WebSite1中添加Web服務(wù)引用,服務(wù)應(yīng)用的地址為:“http://localhost:27198/FileService.asmx”,其中27198是WebService網(wǎng)站的動態(tài)端口號,不同的運(yùn)行環(huán)境,該端口號會不同。3) 在WebSite1的Web窗體Default.aspx中,為按鈕Button1和Button2增加按鈕點(diǎn)擊事件的處理程序,代碼如下:6.6案例分析

protectedvoidButton1_Click(objectsender,EventArgse){//創(chuàng)建WebService中FileService的對象localhost.FileServicefs=newlocalhost.FileService();//調(diào)用UploadImage方法進(jìn)行文件的上傳//通過FileUpload1控件可以獲取到用戶選擇上傳的//文件字節(jié)數(shù)組和文件名稱

fs.UploadImage(FileUpload1.FileBytes,FileUpload1.FileName);}protectedvoidButton2_Click(objectsender,EventArgse){ //創(chuàng)建WebService中

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論