版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章流與文件8.1流的基本概念
8.2目錄
8.3File類和FileInfo類
8.4文件的讀寫05二月2023第8章流與文件05二月20238.1流的基本概念文件(File)是計(jì)算機(jī)的基本概念,一般指存儲(chǔ)于外部介質(zhì)上的信息集合。每個(gè)文件應(yīng)有一個(gè)包括設(shè)備及路徑信息的文件名。其中外部介質(zhì)主要指硬盤,也可包括光盤、軟盤或磁帶等。信息是數(shù)據(jù)和程序代碼的總稱。在程序中,文件的概念不單是狹義地指硬盤上的文件,所有的有輸入輸出功能的設(shè)備,例如鍵盤,控制臺(tái),顯示器,打印機(jī)都被視為文件。這就是廣義的文件的概念。就輸入輸出操作來(lái)說(shuō),這些外設(shè)和硬盤上的文件是一致的,對(duì)于程序員來(lái)說(shuō)文件只與信息的輸入輸出相關(guān),而且這種輸入輸出是串行序列形式的。于是,人們把文件的概念抽象為“流”(stream)。05二月20238.1流的基本概念
由此可見,文件流是程序語(yǔ)言按順序操作文件內(nèi)容的一種方式,是現(xiàn)實(shí)內(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。05二月20238.1流的基本概念C#為操作文件提供其他輔助類,包括DriveInfo、Directory、DirectoryInfo、File、FileInfo類。常用的類:File------實(shí)用類,提供許多靜態(tài)方法,用于移動(dòng)、刪除、和復(fù)制文件。Directory------實(shí)用類,提供許多靜態(tài)方法,用于移動(dòng)、刪除和復(fù)制目錄。Path------實(shí)用類,用于處理路徑名稱。FileInfo------表示磁盤上的物理文件,具有可以處理此文件的方法,要完成對(duì)文件的讀寫工作,就必須創(chuàng)建Stream對(duì)像。DirectoryInfo------表示磁盤上的物理目錄,具有可以處理此目錄的方法FileStream-------表示可以被寫或被讀,或二者都可的文件,此文件可以同步或異步讀和寫StreamReader------從流中讀取字符數(shù)據(jù),并可通過(guò)使用FileStream被創(chuàng)建為基類。StreamWriter------向流寫字符數(shù)據(jù),可通過(guò)使用FileStream被創(chuàng)建為基類。05二月20238.2目錄
在.NET中,我們可以用DriveInfo來(lái)獲取驅(qū)動(dòng)器信息。例如可以獲得盤符、卷標(biāo)、類型、大小、剩余空間等驅(qū)動(dòng)器信息。
注意:直接訪問(wèn)DriveInfo的屬性、方法時(shí),可能會(huì)拋出異常。例如,程序所在的機(jī)器上沒(méi)有安裝軟驅(qū),但WINDOWS默認(rèn)加載了軟驅(qū)的驅(qū)動(dòng),所以程序在訪問(wèn)myDrive.DriveFormat屬性時(shí)會(huì)因?yàn)闊o(wú)法爭(zhēng)取讀取‘軟驅(qū)’的格式而拋出異常。解決方法也很簡(jiǎn)單,在訪問(wèn)之前加入if(myDrive.IsReady)來(lái)對(duì)驅(qū)動(dòng)器的有效性進(jìn)行驗(yàn)證。
例8-1使用DriveInfo類獲得驅(qū)動(dòng)器信息。不同的電腦運(yùn)行結(jié)果不同。05二月2023VisualC#2008程序設(shè)計(jì)8.2目錄8.2.2Directory類
將Directory類用于典型操作,如復(fù)制、移動(dòng)、重命名、創(chuàng)建和刪除目錄,8-1表列出了Directory類的主要成員。他們都是靜態(tài)成員方法,所以不需要實(shí)例化Directory類即可使用。
上述Directory的靜態(tài)方法的最主要的參數(shù)為string類型的路徑。在接受路徑的成員中,路徑可以是指文件或僅是目錄。指定路徑也可以是相對(duì)路徑或者絕對(duì)路徑。例如,以下都是可接受的路徑:
“c:\\MyDir”表示C盤下的名為“MyDir”文件夾。
“MyDir\\MySubdir”表示程序當(dāng)前路徑下的相對(duì)路徑,例如,如果程序在C盤根目錄,則該相對(duì)路徑及等同于“c:\\MyDir\\MySubdir”。
“\\\\MyServer\\MyShare”表示遠(yuǎn)程機(jī)器MyServer(IP或機(jī)器名)上的“MyShare”目錄例如,代碼Directory.Delete(“c:\\MyDir”),將刪除C:\MyDir目錄。這里的“\\”第一個(gè)反斜杠為C#所定義的轉(zhuǎn)義字符?!纠?-2】使用Directory類建立文件目錄。05二月20238.2目錄上節(jié)我們介紹了Directory類,Directory提供了一組靜態(tài)方法,幫助用戶完成對(duì)目錄的操作。由于是靜態(tài)方法,使用時(shí)不需要實(shí)例化,即可調(diào)用。但這也意味著該類無(wú)法為用戶保存運(yùn)行上下文及狀態(tài)信息。因此,Directory的靜態(tài)方法都需要安全檢查。如果打算多次重用某個(gè)對(duì)象,可考慮使用DirectoryInfo的實(shí)例方法,而不是Directory
類的相應(yīng)靜態(tài)方法,因?yàn)椴⒉豢偸切枰踩珯z查?!纠?-3】使用DirectoryInfo類建立文件目錄。
05二月20238.3File類和FileInfo類File類用于對(duì)文件的典型操作,如復(fù)制、移動(dòng)、重命名、創(chuàng)建、打開、刪除和追加到文件。類似于Directory類,F(xiàn)ile的主要方法也為靜態(tài)型。這意味用戶無(wú)須實(shí)例化即可調(diào)用方法完成相應(yīng)操作。File類的方法大多需要輸入String型的路徑參數(shù),表明用戶需要操作哪個(gè)文件。這些方法可接受的路徑的表達(dá)方式與Directory類相同
05二月20238.3File類和FileInfo類
與File類不同的是,F(xiàn)ileInfo類在使用時(shí)需要實(shí)例化。調(diào)用構(gòu)造函數(shù)publicFileInfo(stringfileName)輸入路徑做為參數(shù),可構(gòu)造對(duì)象操作相應(yīng)的文件。FileInfo與File的關(guān)系就如同DirectoryInfo與Directory的關(guān)系一樣。由于FileInfo的實(shí)例方法不總是做安全性檢查,當(dāng)用戶需要反復(fù)調(diào)用方法操作文件時(shí),使用FileInfo的實(shí)例方法效率可能高一些?!纠?-4】使用File和FileInfo類建立文件。05二月20238.4文件的讀寫我們知道任何數(shù)據(jù)包括字符,在計(jì)算機(jī)(包括文件)中是以二進(jìn)制方式存儲(chǔ)的。那么如何用二進(jìn)制字節(jié)來(lái)表示各種字符呢。這就是字符編碼(也稱為字符集)所要規(guī)定的內(nèi)容。最早使用ASCII7位字符集作為計(jì)算機(jī)通用的標(biāo)準(zhǔn)化編碼,它規(guī)定了128個(gè)(后來(lái)擴(kuò)展到256個(gè))拉丁字母的字節(jié)表示法。很顯然,該編碼無(wú)法表示中文漢字字符、希臘字符、阿拉伯字符等非拉丁字符。05二月20238.4文件的讀寫為此,各個(gè)國(guó)家都創(chuàng)建了支持本國(guó)語(yǔ)言的字符集,例如中文字符集GB2312、GBK、GB18030-2005等。當(dāng)然,各個(gè)國(guó)家的字符集顯然無(wú)法被世界上所有其他國(guó)家的計(jì)算機(jī)軟件系統(tǒng)所支持。舉例來(lái)說(shuō),程序使用GB2312編碼方式在文件中存儲(chǔ)字符“A”。該文件被發(fā)送到國(guó)外某計(jì)算機(jī)中,如果該計(jì)算機(jī)上讀文件的軟件不支持GB2312操作系統(tǒng),轉(zhuǎn)而用其默認(rèn)的編碼來(lái)解釋該文件,那么用戶很可能會(huì)得到一些奇怪的字符而非字符A。這就是我們程序開發(fā)過(guò)程中經(jīng)常遇到的亂碼問(wèn)題。05二月20238.4文件的讀寫為了解決亂碼問(wèn)題,實(shí)現(xiàn)軟件的國(guó)際化,國(guó)際標(biāo)準(zhǔn)化組織制定了Unicode、UTF-8等字符集作為國(guó)際標(biāo)準(zhǔn)。這些字符集包含了世界上所有國(guó)家的字符。只要按國(guó)際標(biāo)準(zhǔn)的編碼存儲(chǔ)字符到文件中,那么其他按國(guó)際標(biāo)準(zhǔn)讀文件的系統(tǒng)就一定能得到相同的字符。綜上所述,我們?cè)谧x寫文件過(guò)程中一定要注意編碼問(wèn)題。使用某種編碼存儲(chǔ)字符,那么也要用該編碼來(lái)讀文件。05二月20238.4文件的讀寫
文件是計(jì)算機(jī)系統(tǒng)持久保存數(shù)據(jù)的一種方式。按照所存儲(chǔ)的數(shù)據(jù)的不同,可分為文本文件和數(shù)據(jù)文件。文本文件被程序用來(lái)存儲(chǔ)字符,例如英文字符、漢字、數(shù)學(xué)符號(hào)等等。程序用某種編碼,將文件中的二進(jìn)制解釋為某些字符。數(shù)據(jù)文件被程序用以存儲(chǔ)非字符數(shù)據(jù),例如圖像數(shù)據(jù)等。程序按照一定規(guī)則,對(duì)數(shù)據(jù)進(jìn)行解釋。例如,JPG圖像文件,被讀入程序后,按照J(rèn)PG標(biāo)準(zhǔn)即可顯示為一幅圖片。05二月20238.4文件的讀寫文本文件與數(shù)據(jù)文件自身并沒(méi)有什么區(qū)別。二者在后綴名、存儲(chǔ)方式上并沒(méi)有本質(zhì)區(qū)別。程序可以用txt為后綴的文件存字符文本,也可以用bin為后綴的文件存(只不過(guò)Windows操作系統(tǒng)無(wú)法自動(dòng)將bin關(guān)聯(lián)到記事本程序罷了)。決定文件分類的其實(shí)是程序?qū)ξ募拇鎯?chǔ)內(nèi)容及解釋方式。如果程序?qū)⒆址鳛閮?nèi)容存入文件,并以字符方式來(lái)解析文件中的數(shù)據(jù),那么我們就可以把這個(gè)文件稱為文本文件;如果程序直接將二進(jìn)制字節(jié)數(shù)據(jù)存入文件,并將文件中的數(shù)據(jù)直接讀到為內(nèi)存中的二進(jìn)制字節(jié)變量中,再進(jìn)行進(jìn)一步處理,那么該文件就是數(shù)據(jù)文件。
05二月20238.4文件的讀寫由此可見文本文件與數(shù)據(jù)文件的本質(zhì)區(qū)別其實(shí)是程序讀寫文件所采用的方式。在C#中,提供了FileStream類,可按字節(jié)方式來(lái)讀寫文件;提供了StreamReader、StreamWrtier類,并以某種編碼將字符寫入或讀出文件。
使用FileStream類可以建立文件流對(duì)象,用來(lái)打開和關(guān)閉文件,以字節(jié)為單位讀寫文件。也可以對(duì)于文件相關(guān)的操作系統(tǒng)句柄進(jìn)行操作,如管道、標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出。FileStream類對(duì)象能對(duì)輸入輸出進(jìn)行緩沖,從而提高性能?!纠?-5】讀寫文件,寫字節(jié)數(shù)組數(shù)據(jù)到文件的程序如下,該程序?qū)⒔⑽募:\bytefile.bin,再將文件中的內(nèi)容讀出并顯示到控制臺(tái)界面。05二月20238.4文件的讀寫FileStream類操作的是字節(jié)和字節(jié)數(shù)組,而StreamReader允許將字符和字符串寫入文件,它根據(jù)某字符編碼(由用戶通過(guò)參數(shù)指定,采用操作系統(tǒng)默認(rèn))轉(zhuǎn)換為內(nèi)存中的字符串變量,StreamWriter對(duì)象用
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智慧校園宿管員綜合服務(wù)聘用合同范本4篇
- 個(gè)性化服務(wù)協(xié)議模板 2024全新出爐版B版
- 2025年度教育機(jī)構(gòu)場(chǎng)地租賃及設(shè)施共建合同4篇
- 2025年度新能源汽車充電樁研發(fā)與運(yùn)營(yíng)合同3篇
- 二零二五版智能法律助手APP下載與法律服務(wù)套餐協(xié)議3篇
- 專業(yè)空調(diào)安裝協(xié)議2024年細(xì)則版A版
- 2024美發(fā)行業(yè)專屬勞動(dòng)協(xié)議樣例版
- 二零二四外幣資金借貸風(fēng)險(xiǎn)監(jiān)控及應(yīng)對(duì)策略合同3篇
- 專項(xiàng)商鋪投資預(yù)訂協(xié)議:2024認(rèn)籌細(xì)則
- 二零二四商鋪物業(yè)管理與設(shè)施升級(jí)改造合同2篇
- 2024年石家莊正定國(guó)際機(jī)場(chǎng)改擴(kuò)建工程合同
- 2025年度愛(ài)讀書學(xué)長(zhǎng)定制化閱讀計(jì)劃合同2篇
- 江西省港口集團(tuán)有限公司招聘筆試沖刺題2025
- 河南省信陽(yáng)市浉河區(qū)9校聯(lián)考2024-2025學(xué)年八年級(jí)上學(xué)期12月月考地理試題(含答案)
- 火災(zāi)安全教育觀后感
- 快速康復(fù)在骨科護(hù)理中的應(yīng)用
- 國(guó)民經(jīng)濟(jì)行業(yè)分類和代碼表(電子版)
- ICU患者外出檢查的護(hù)理
- 公司收購(gòu)設(shè)備合同范例
- 廣東省潮州市2023-2024學(xué)年高二上學(xué)期語(yǔ)文期末考試試卷(含答案)
- 2024年光伏發(fā)電項(xiàng)目EPC總包合同
評(píng)論
0/150
提交評(píng)論