C#-程序設(shè)計教程第8章_第1頁
C#-程序設(shè)計教程第8章_第2頁
C#-程序設(shè)計教程第8章_第3頁
C#-程序設(shè)計教程第8章_第4頁
C#-程序設(shè)計教程第8章_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第8章流與文件8.1流的基本概念

8.2目錄

8.3File類和FileInfo類

8.4文件的讀寫29九月2024第8章流與文件29九月20248.1流的基本概念文件(File)是計算機的基本概念,一般指存儲于外部介質(zhì)上的信息集合。每個文件應(yīng)有一個包括設(shè)備及路徑信息的文件名。其中外部介質(zhì)主要指硬盤,也可包括光盤、軟盤或磁帶等。信息是數(shù)據(jù)和程序代碼的總稱。在程序中,文件的概念不單是狹義地指硬盤上的文件,所有的有輸入輸出功能的設(shè)備,例如鍵盤,控制臺,顯示器,打印機都被視為文件。這就是廣義的文件的概念。就輸入輸出操作來說,這些外設(shè)和硬盤上的文件是一致的,對于程序員來說文件只與信息的輸入輸出相關(guān),而且這種輸入輸出是串行序列形式的。于是,人們把文件的概念抽象為“流”(stream)。29九月20248.1流的基本概念

由此可見,文件流是程序語言按順序操作文件內(nèi)容的一種方式,是現(xiàn)實內(nèi)外存數(shù)據(jù)交換的方法。在C#中則表現(xiàn)為一組派生于Stream的文件流類。例如FileStream類,以字節(jié)為單位讀寫文件;BinaryRead類和BinaryWrite類,以基本數(shù)據(jù)類型為單位讀寫文件,可以從文件直接讀寫bool、string、short、int等基本數(shù)據(jù)類型數(shù)據(jù);StreamReader和StreamWriter類以字符或字符串為單位讀寫文件。使用流讀寫文件必須引入命名空間:System.IO。29九月20248.1流的基本概念C#為操作文件提供其他輔助類,包括DriveInfo、Directory、DirectoryInfo、File、FileInfo類。常用的類:File------實用類,提供許多靜態(tài)方法,用于移動、刪除、和復(fù)制文件。Directory------實用類,提供許多靜態(tài)方法,用于移動、刪除和復(fù)制目錄。Path------實用類,用于處理路徑名稱。FileInfo------表示磁盤上的物理文件,具有可以處理此文件的方法,要完成對文件的讀寫工作,就必須創(chuàng)建Stream對像。DirectoryInfo------表示磁盤上的物理目錄,具有可以處理此目錄的方法FileStream-------表示可以被寫或被讀,或二者都可的文件,此文件可以同步或異步讀和寫StreamReader------從流中讀取字符數(shù)據(jù),并可通過使用FileStream被創(chuàng)建為基類。StreamWriter------向流寫字符數(shù)據(jù),可通過使用FileStream被創(chuàng)建為基類。29九月20248.2目錄

在.NET中,我們可以用DriveInfo來獲取驅(qū)動器信息。例如可以獲得盤符、卷標(biāo)、類型、大小、剩余空間等驅(qū)動器信息。

注意:直接訪問DriveInfo的屬性、方法時,可能會拋出異常。例如,程序所在的機器上沒有安裝軟驅(qū),但WINDOWS默認加載了軟驅(qū)的驅(qū)動,所以程序在訪問myDrive.DriveFormat屬性時會因為無法爭取讀取‘軟驅(qū)’的格式而拋出異常。解決方法也很簡單,在訪問之前加入if(myDrive.IsReady)來對驅(qū)動器的有效性進行驗證。

例8-1使用DriveInfo類獲得驅(qū)動器信息。不同的電腦運行結(jié)果不同。29九月2024VisualC#2008程序設(shè)計8.2目錄8.2.2Directory類

將Directory類用于典型操作,如復(fù)制、移動、重命名、創(chuàng)建和刪除目錄,8-1表列出了Directory類的主要成員。他們都是靜態(tài)成員方法,所以不需要實例化Directory類即可使用。

上述Directory的靜態(tài)方法的最主要的參數(shù)為string類型的路徑。在接受路徑的成員中,路徑可以是指文件或僅是目錄。指定路徑也可以是相對路徑或者絕對路徑。例如,以下都是可接受的路徑:

“c:\\MyDir”表示C盤下的名為“MyDir”文件夾。

“MyDir\\MySubdir”表示程序當(dāng)前路徑下的相對路徑,例如,如果程序在C盤根目錄,則該相對路徑及等同于“c:\\MyDir\\MySubdir”。

“\\\\MyServer\\MyShare”表示遠程機器MyServer(IP或機器名)上的“MyShare”目錄例如,代碼Directory.Delete(“c:\\MyDir”),將刪除C:\MyDir目錄。這里的“\\”第一個反斜杠為C#所定義的轉(zhuǎn)義字符。【例8-2】使用Directory類建立文件目錄。29九月20248.2目錄上節(jié)我們介紹了Directory類,Directory提供了一組靜態(tài)方法,幫助用戶完成對目錄的操作。由于是靜態(tài)方法,使用時不需要實例化,即可調(diào)用。但這也意味著該類無法為用戶保存運行上下文及狀態(tài)信息。因此,Directory的靜態(tài)方法都需要安全檢查。如果打算多次重用某個對象,可考慮使用DirectoryInfo的實例方法,而不是Directory

類的相應(yīng)靜態(tài)方法,因為并不總是需要安全檢查?!纠?-3】使用DirectoryInfo類建立文件目錄。

29九月20248.3File類和FileInfo類File類用于對文件的典型操作,如復(fù)制、移動、重命名、創(chuàng)建、打開、刪除和追加到文件。類似于Directory類,F(xiàn)ile的主要方法也為靜態(tài)型。這意味用戶無須實例化即可調(diào)用方法完成相應(yīng)操作。File類的方法大多需要輸入String型的路徑參數(shù),表明用戶需要操作哪個文件。這些方法可接受的路徑的表達方式與Directory類相同

29九月20248.3File類和FileInfo類

與File類不同的是,F(xiàn)ileInfo類在使用時需要實例化。調(diào)用構(gòu)造函數(shù)publicFileInfo(stringfileName)輸入路徑做為參數(shù),可構(gòu)造對象操作相應(yīng)的文件。FileInfo與File的關(guān)系就如同DirectoryInfo與Directory的關(guān)系一樣。由于FileInfo的實例方法不總是做安全性檢查,當(dāng)用戶需要反復(fù)調(diào)用方法操作文件時,使用FileInfo的實例方法效率可能高一些?!纠?-4】使用File和FileInfo類建立文件。29九月20248.4文件的讀寫我們知道任何數(shù)據(jù)包括字符,在計算機(包括文件)中是以二進制方式存儲的。那么如何用二進制字節(jié)來表示各種字符呢。這就是字符編碼(也稱為字符集)所要規(guī)定的內(nèi)容。最早使用ASCII7位字符集作為計算機通用的標(biāo)準化編碼,它規(guī)定了128個(后來擴展到256個)拉丁字母的字節(jié)表示法。很顯然,該編碼無法表示中文漢字字符、希臘字符、阿拉伯字符等非拉丁字符。29九月20248.4文件的讀寫為此,各個國家都創(chuàng)建了支持本國語言的字符集,例如中文字符集GB2312、GBK、GB18030-2005等。當(dāng)然,各個國家的字符集顯然無法被世界上所有其他國家的計算機軟件系統(tǒng)所支持。舉例來說,程序使用GB2312編碼方式在文件中存儲字符“A”。該文件被發(fā)送到國外某計算機中,如果該計算機上讀文件的軟件不支持GB2312操作系統(tǒng),轉(zhuǎn)而用其默認的編碼來解釋該文件,那么用戶很可能會得到一些奇怪的字符而非字符A。這就是我們程序開發(fā)過程中經(jīng)常遇到的亂碼問題。29九月20248.4文件的讀寫為了解決亂碼問題,實現(xiàn)軟件的國際化,國際標(biāo)準化組織制定了Unicode、UTF-8等字符集作為國際標(biāo)準。這些字符集包含了世界上所有國家的字符。只要按國際標(biāo)準的編碼存儲字符到文件中,那么其他按國際標(biāo)準讀文件的系統(tǒng)就一定能得到相同的字符。綜上所述,我們在讀寫文件過程中一定要注意編碼問題。使用某種編碼存儲字符,那么也要用該編碼來讀文件。29九月20248.4文件的讀寫

文件是計算機系統(tǒng)持久保存數(shù)據(jù)的一種方式。按照所存儲的數(shù)據(jù)的不同,可分為文本文件和數(shù)據(jù)文件。文本文件被程序用來存儲字符,例如英文字符、漢字、數(shù)學(xué)符號等等。程序用某種編碼,將文件中的二進制解釋為某些字符。數(shù)據(jù)文件被程序用以存儲非字符數(shù)據(jù),例如圖像數(shù)據(jù)等。程序按照一定規(guī)則,對數(shù)據(jù)進行解釋。例如,JPG圖像文件,被讀入程序后,按照JPG標(biāo)準即可顯示為一幅圖片。29九月20248.4文件的讀寫文本文件與數(shù)據(jù)文件自身并沒有什么區(qū)別。二者在后綴名、存儲方式上并沒有本質(zhì)區(qū)別。程序可以用txt為后綴的文件存字符文本,也可以用bin為后綴的文件存(只不過Windows操作系統(tǒng)無法自動將bin關(guān)聯(lián)到記事本程序罷了)。決定文件分類的其實是程序?qū)ξ募拇鎯?nèi)容及解釋方式。如果程序?qū)⒆址鳛閮?nèi)容存入文件,并以字符方式來解析文件中的數(shù)據(jù),那么我們就可以把這個文件稱為文本文件;如果程序直接將二進制字節(jié)數(shù)據(jù)存入文件,并將文件中的數(shù)據(jù)直接讀到為內(nèi)存中的二進制字節(jié)變量中,再進行進一步處理,那么該文件就是數(shù)據(jù)文件。

29九月20248.4文件的讀寫由此可見文本文件與數(shù)據(jù)文件的本質(zhì)區(qū)別其實是程序讀寫文件所采用的方式。在C#中,提供了FileStream類,可按字節(jié)方式來讀寫文件;提供了StreamReader、StreamWrtier類,并以某種編碼將字符寫入或讀出文件。

使用FileStream類可以建立文件流對象,用來打開和關(guān)閉文件,以字節(jié)為單位讀寫文件。也可以對于文件相關(guān)的操作系統(tǒng)句柄進行操作,如管道、標(biāo)準輸入和標(biāo)準輸出。FileStream類對象能對輸入輸出進行緩沖,從而提高性能?!纠?-5】讀寫文件,寫字節(jié)數(shù)組數(shù)據(jù)到文件的程序如下,該程序?qū)⒔⑽募:\bytefile.bin,再將文件中的內(nèi)容讀出并顯示到控制臺界面。29九月20248.4文件的讀寫FileStream類操作的是字節(jié)和字節(jié)數(shù)組,而StreamReader允許將字符和字符串寫入文件,它根據(jù)某字符編碼(由用戶通過參數(shù)指定,采用操作系統(tǒng)默認)轉(zhuǎn)換為內(nèi)存中的字符串變量,StreamWriter對象用

溫馨提示

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

評論

0/150

提交評論