C#程序設(shè)計(jì)教程(第6版)課件 ch09 文件和流_第1頁(yè)
C#程序設(shè)計(jì)教程(第6版)課件 ch09 文件和流_第2頁(yè)
C#程序設(shè)計(jì)教程(第6版)課件 ch09 文件和流_第3頁(yè)
C#程序設(shè)計(jì)教程(第6版)課件 ch09 文件和流_第4頁(yè)
C#程序設(shè)計(jì)教程(第6版)課件 ch09 文件和流_第5頁(yè)
已閱讀5頁(yè),還剩13頁(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)介

第9章文件和流C#程序設(shè)計(jì)教程(第6版)01知識(shí)目標(biāo):使學(xué)生了解文件和流、文件的讀和寫的概念,以及在編程中使用文件的意義。03思政目標(biāo):培養(yǎng)學(xué)生行事“有序”的理念。02能力目標(biāo):使學(xué)生能夠基于文件操作編程實(shí)現(xiàn)鏈表算法等。本章學(xué)習(xí)目標(biāo)9.1文件和流的概念PARTONE9.1文件和流的概念文件計(jì)算機(jī)管理數(shù)據(jù)的基本單位,同時(shí)也是應(yīng)用程序保存和讀取數(shù)據(jù)的一個(gè)重要場(chǎng)所。文件是指在各種存儲(chǔ)介質(zhì)上(如硬盤、可移動(dòng)磁盤、CD等)永久存儲(chǔ)的數(shù)據(jù)的有序集合,它是進(jìn)行數(shù)據(jù)讀寫操作的基本對(duì)象。通常情況下,文件按照樹狀目錄進(jìn)行組織,每個(gè)文件都有文件名、文件所在路徑、創(chuàng)建時(shí)間及訪問(wèn)權(quán)限等屬性。文件和流是既有區(qū)別又有聯(lián)系的兩個(gè)概念。流是字節(jié)序列的抽象概念,如文件、輸入/輸出設(shè)備、內(nèi)部進(jìn)程通信管道等。流提供了一種向后備存儲(chǔ)器寫入字節(jié)和從后備存儲(chǔ)器讀取字節(jié)的方式。除了和磁盤文件直接相關(guān)的文件流,流還有多種類型。流可以分布在網(wǎng)絡(luò)、內(nèi)存或磁帶中,分別稱為網(wǎng)絡(luò)流、內(nèi)存流和磁帶流。文件管理是操作系統(tǒng)的一個(gè)重要組成部分,而文件操作是在用戶編寫應(yīng)用程序時(shí)對(duì)文件進(jìn)行管理的一種手段。1.文件的類目前,計(jì)算機(jī)系統(tǒng)中存在許多不同的文件系統(tǒng)。在廣大計(jì)算機(jī)用戶非常熟悉的DOS、Windows10/11等操作系統(tǒng)中,使用了FAT、FAT32、NTFS等文件系統(tǒng)。這些文件系統(tǒng)在操作系統(tǒng)內(nèi)部有不同的實(shí)現(xiàn)方式,但是它們?yōu)橛脩籼峁┑慕涌谑且恢碌摹M瑯拥?,在C#中進(jìn)行文件操作時(shí),用戶也不需要關(guān)心文件的具體存儲(chǔ)格式,只要利用.NETFramework封裝的對(duì)文件進(jìn)行操作的統(tǒng)一外部接口,就可以保證程序在不同的文件系統(tǒng)上能夠良好地移植。.NETFramework的System.IO命名空間提供了許多類,可以用于訪問(wèn)服務(wù)器端的文件夾與文件,允許對(duì)數(shù)據(jù)流與文件進(jìn)行同步/異步(synchronous/asynchronous)讀取和寫入,其重要的類及說(shuō)明如表9-1所示。9.1文件和流的概念1)File的主要類在這些類中,Stream是抽象類,不允許直接使用類的實(shí)例,但用戶可以使用系統(tǒng)提供的Stream類的派生類,或者根據(jù)需要?jiǎng)?chuàng)建自己的派生類。所有表示流的類都是從抽象類Stream繼承的。Stream類及其派生類提供不同類型的輸入和輸出的一般視圖,使得開(kāi)發(fā)人員不必了解操作系統(tǒng)和基礎(chǔ)設(shè)備的具體細(xì)節(jié)。流的3種基本操作如下。(1)讀?。簭牧鞯綌?shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)傳輸。(2)寫入:從數(shù)據(jù)結(jié)構(gòu)到流的數(shù)據(jù)傳輸。(3)查找:對(duì)流內(nèi)的當(dāng)前位置進(jìn)行查詢和修改。9.1文件和流的概念流非常類似于單獨(dú)的磁盤文件,它也是進(jìn)行數(shù)據(jù)讀取操作的基本對(duì)象。流為用戶提供了連續(xù)的字節(jié)流存儲(chǔ)空間。數(shù)據(jù)實(shí)際的存儲(chǔ)位置可以不連續(xù),甚至可以分布在多個(gè)磁盤上,但用戶看到的是封裝后的數(shù)據(jù)結(jié)構(gòu),是連續(xù)的字節(jié)流的抽象結(jié)構(gòu)。Directory類可以用于訪問(wèn)文件夾,進(jìn)行目錄管理。利用該類可以完成創(chuàng)建、移動(dòng)、瀏覽目錄等操作,甚至可以定義隱藏目錄和只讀目錄。Directory類是一個(gè)密封類,它的所有方法都是靜態(tài)的,因而不必具有目錄的實(shí)例就可以直接調(diào)用。而DirectoryInfo類必須在創(chuàng)建對(duì)象實(shí)例后才可以使用其屬性與方法。Directory類的構(gòu)造函數(shù)形式如下。PublicDirectory(stringpath);其中的參數(shù)path表示目錄所在的路徑。Directory類常用的共享方法如下。(1)CreateDirectory(path):根據(jù)參數(shù)path指定的路徑創(chuàng)建文件夾,其方法的原型定義如下。PublicstaticDirectoryInfoCreateDirectory(stringpath);(4)GetCreationTime(path):獲取參數(shù)path指定的文件夾或文件的創(chuàng)建日期,返回值類型為DateTime。File類和FileInfo類可以用于訪問(wèn)文件,兩者的差別在于File類提供的是共享方法,無(wú)須創(chuàng)建對(duì)象實(shí)例就可以使用其方法,而FileInfo類必須在創(chuàng)建對(duì)象實(shí)例后才可以使用其屬性與方法。(2)Delete(path,recursive):刪除參數(shù)path指定的文件夾,參數(shù)recursive用于指定是否刪除其子文件夾及文件,如果省略不寫,則表示為默認(rèn)值false。當(dāng)指定的文件夾為只讀,或者指定的文件夾包含子文件夾或文件且不允許刪除其子文件夾及文件,或者沒(méi)有足夠的權(quán)限刪除指定的文件夾時(shí),會(huì)發(fā)生異常錯(cuò)誤。其原型定義如下。PublicstaticvoidDelete(string);(3)GetCurrentDirectory():獲取應(yīng)用程序的當(dāng)前工作目錄,其方法的原型定義如下。PublicstaticstringGetCurrentDirectory();9.1文件和流的概念2)File類常用的共享方法下面介紹File類常用的共享方法。(1)Create(path,bufferSize):創(chuàng)建參數(shù)path指定的文本文件,返回值為FileStream對(duì)象實(shí)例,此FileStream對(duì)象可以讀取和寫入字節(jié)數(shù)據(jù),如果指定的文件已經(jīng)存在,那么將覆蓋原來(lái)的文件,參數(shù)bufferSize用于指定緩沖區(qū)的大小,單位為字節(jié),可以省略不寫。其原型定義如下。PublicstaticFileStreamCreate(stringpath);其中path參數(shù)表示文件的全路徑名稱。(2)Open(path,mode,access,fileShare):打開(kāi)一個(gè)參數(shù)path指定的文件,并返回FileStream對(duì)象實(shí)例,參數(shù)mode為文件的打開(kāi)模式。其原型定義如下。PublicstaticFileStreamOpen(stringpath,FileMode);PublicstaticFileStreamOpen(stringpath,FileMode,FileAccess);PublicstaticFileStreamOpen(stringpath,FileMode,FileAccess,FileShare);9.1文件和流的概念其中,F(xiàn)ileMode參數(shù)用于指定對(duì)文件的操作模式,共有6個(gè)可選值。①Append:向文件追加數(shù)據(jù)。②Create:新建文件,如果同名文件已經(jīng)存在,則新建文件將覆蓋該文件。③CreateNew:新建文件,如果同名文件已經(jīng)存在,則引發(fā)異常。④Open:打開(kāi)文件。⑤OpenOrCreate:如果文件已經(jīng)存在,則打開(kāi)該文件,否則新建一個(gè)文件。⑥Truncate:截?cái)辔募?。FileAccess參數(shù)用于指定程序?qū)ξ募魉苓M(jìn)行的操作,共有3個(gè)可選值。①Read:讀訪問(wèn),從文件中讀取數(shù)據(jù)。②ReadWrite:讀訪問(wèn)和寫訪問(wèn),從文件中讀取數(shù)據(jù)和將數(shù)據(jù)寫入文件。③Write:寫訪問(wèn),可將數(shù)據(jù)寫入文件??紤]到有可能多個(gè)應(yīng)用程序需要同時(shí)讀取一個(gè)文件,因此在Open()方法中設(shè)置了文件共享標(biāo)志FileShare,該參數(shù)共有5個(gè)可選值。①Inheritable:使文件句柄可由子進(jìn)程繼承。②None:不共享當(dāng)前文件。③Read:只讀共享,允許隨后打開(kāi)文件讀取。④Write:只寫共享,允許隨后打開(kāi)文件寫入。⑤ReadWrite:讀和寫共享,允許隨后打開(kāi)文件讀取和寫入。9.1文件和流的概念(3)其他打開(kāi)文件的方法。①除了可以用Open()方法打開(kāi)文件,還可以用其他方法打開(kāi)文件。不過(guò)通過(guò)OpenRead()方法打開(kāi)的文件只能進(jìn)行文件讀取操作,不能進(jìn)行文件寫入操作。其原型定義如下。publicstaticFileStreamOpenRead(stringpath);其中path參數(shù)表示要打開(kāi)的文件的全路徑名稱。②此外,還可以用OpenText()方法打開(kāi)文件。不過(guò)通過(guò)OpenText()方法打開(kāi)的文件只能進(jìn)行文件讀取操作,不能進(jìn)行文件寫入操作,而且打開(kāi)的文件類型只能是純文本文件。其原型定義如下。publicstaticFileStreamOpenText(stringpath);③與OpenText()方法不同的是,用OpenWrite()方法打開(kāi)的文件既可以進(jìn)行讀取文件操作,又可以進(jìn)行文件寫入操作。其原型定義如下。publicstaticFileStreamOpenWrite(stringpath);(4)Copy(sourceFileName,destFileName,overwrite):復(fù)制參數(shù)sourceFileName指定的文件,新文件的路徑及名稱為destFileName,參數(shù)overwrite用于指定當(dāng)目的文件已存在時(shí)是否覆蓋原來(lái)的文件,如果省略不寫,則表示為默認(rèn)值false。其原型定義如下。PublicstaticvoidCopy(stringsourceFileName,stringdestFileName);PublicstaticvoidCopy(stringsourceFileName,stringdestFileName,booloverwrite);9.1文件和流的概念(5)Delete(path):刪除參數(shù)path指定的文件,其原型定義如下。PublicstaticvoidDelete(stringpath);(6)Move(sourceFileName,destFileName):將參數(shù)sourceFileName指定的源文件移動(dòng)至參數(shù)destFileName指定的目標(biāo)位置,移動(dòng)后的文件名稱可以和源文件的不同。請(qǐng)注意,文件夾無(wú)法跨驅(qū)動(dòng)器移動(dòng),但文件可以。其原型定義如下。PublicstaticvoidMove(stringsourceFileName,stringdestFileName);9.1文件和流的概念2.FileStream類與文件流FileStream類可實(shí)現(xiàn)使用文件流的方式操作文件。通過(guò)FileStream類的構(gòu)造函數(shù)可以新建一個(gè)文件。1)FileStream類的構(gòu)造函數(shù)FileStream類的構(gòu)造函數(shù)有很多,其中比較常用的構(gòu)造函數(shù)的原型定義如下。(1)通過(guò)指定的路徑和創(chuàng)建模式初始化FileStream類的新實(shí)例。publicFileStream(stringpath,FileModemode);(2)通過(guò)指定的路徑、創(chuàng)建模式和讀/寫權(quán)限初始化FileStream類的新實(shí)例。publicFileStream(stringpath,FileModemode,FileAccessaccess);(3)通過(guò)指定的路徑、創(chuàng)建模式、讀/寫權(quán)限和共享權(quán)限創(chuàng)建FileStream類的新實(shí)例。publicFileStream(stringpath,FileModemode,FileAccessaccess,F(xiàn)ileShareshare);其中,mode參數(shù)和access參數(shù)的取值與File類的Open()方法的相應(yīng)參數(shù)的取值相同。如果要通過(guò)文件流的構(gòu)造函數(shù)新建一個(gè)文件,則可以設(shè)置mode參數(shù)為Create,同時(shí)設(shè)置access參數(shù)為Write。2)FileStream類的屬性。FileStream類的主要屬性如下。(1)CanRead:決定當(dāng)前文件流是否支持文件讀取操作。(2)CanSeek:決定當(dāng)前文件流是否支持文件查找操作。(3)CanWrite:決定當(dāng)前文件流是否支持文件寫入操作。(4)Length:獲取用字節(jié)表示的文件流的長(zhǎng)度。(5)Position:獲取或設(shè)置文件流的當(dāng)前位置。9.1文件和流的概念3)FilesStream類的方法FileStream類的主要方法如下。(1)Close():關(guān)閉文件流,其原型定義如下。PublicoverridevoidClose();(2)Read():實(shí)現(xiàn)文件流的讀取,其原型定義如下。PublicoverrideintRead(byte[]array,intoffset,intcount);其中,array參數(shù)是保存讀取數(shù)據(jù)的字節(jié)數(shù)組,offset參數(shù)表示開(kāi)始讀取的文件偏移值,count參數(shù)表示讀取的數(shù)據(jù)量。(3)ReadByte():從文件流中讀取一個(gè)字節(jié)的數(shù)據(jù),其原型定義如下。PublicoverrideintReadByte();(4)Write():負(fù)責(zé)將數(shù)據(jù)寫入文件,其原型定義如下。PublicoverrideintWrite(byte[]array,intoffset,intcount);其中,array參數(shù)是保存寫入數(shù)據(jù)的字節(jié)數(shù)組,offset參數(shù)表示寫入的位置,count參數(shù)表示寫入的數(shù)據(jù)量。(5)WriteByte():用于向文件流寫入一個(gè)字節(jié)的數(shù)據(jù),其原型定義如下。PublicoverrideintWriteByte();9.1文件和流的概念9.2文件的讀和寫PARTTWO1.Write(

)方法Write(

)方法用于將字符、字符數(shù)組、字符串等寫入文本流,其原型定義如下。PublicoverridevoidWrite(char);PublicoverridevoidWrite(char[]);PublicoverridevoidWrite(string);2.WriteLine(

)方法WriteLine(

)方法用于將后跟行結(jié)束符的字符、字符數(shù)組、字符串等寫入文本流,其方法原型定義如下。PublicvirtualvoidWriteLine(charvalue);PublicvirtualvoidWriteLine(char[]buffer);PublicvirtualvoidWriteLine(stringvalue);寫入文本文件(StreamWriter類)的常用構(gòu)造函數(shù)和方法如下。為指定的流初始化StreamWriter類的新實(shí)例的構(gòu)造函數(shù)原型:PublicStreamWriter(S

溫馨提示

  • 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)論