




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
文件操作思政目標(biāo):
?掌握文件系統(tǒng)的知識(shí),主動(dòng)獲取、查詢(xún)、檢索信息,培養(yǎng)主觀能動(dòng)性
?明白文件保護(hù)的重要性,重視上網(wǎng)安全技能要求:
?了解文件系統(tǒng)相關(guān)概念和常用操作
?了解文件處理流的相關(guān)概念及常用類(lèi)實(shí)踐目標(biāo):
?能夠?qū)W會(huì)創(chuàng)建文件,能夠?qū)ξ募M(jìn)行處理
?學(xué)會(huì)熟練運(yùn)用Stream類(lèi)對(duì)文件進(jìn)行操作第14章訪(fǎng)問(wèn)路徑Stream類(lèi)訪(fǎng)問(wèn)01PART訪(fǎng)問(wèn)屬性說(shuō)明AvailableFreeSpace只讀屬性,用于確定驅(qū)動(dòng)器上的可用空間大小DriveTypeCDRom:表示CD-ROM驅(qū)動(dòng)器Fixed:表示一個(gè)不可隨意移除的固定硬盤(pán)Network:表示一個(gè)網(wǎng)絡(luò)驅(qū)動(dòng)器NoRootDirectory:表示一個(gè)沒(méi)有根目錄的驅(qū)動(dòng)器Ram:表示一個(gè)RAM驅(qū)動(dòng)器Removable:表示一個(gè)可移除的驅(qū)動(dòng)器Unknown:表示一個(gè)未知的驅(qū)動(dòng)器類(lèi)型DriveFormat只讀屬性,用于確定驅(qū)動(dòng)器上的文件系統(tǒng)格式類(lèi)型,如NTFS、FAT和FAT32Name只讀屬性,用于獲得驅(qū)動(dòng)器的名稱(chēng)TotalFreeSpace只讀屬性,用于確定磁盤(pán)上的總可用空間量,它沒(méi)有考慮用戶(hù)的空間配額TotalSize用于確定驅(qū)動(dòng)器上的總空間量驅(qū)動(dòng)器的訪(fǎng)問(wèn)需要借助于DriveInfo類(lèi)來(lái)實(shí)現(xiàn),它是密封類(lèi)驅(qū)動(dòng)器訪(fǎng)問(wèn)驅(qū)動(dòng)器的訪(fǎng)問(wèn),常用方法主要是GetDrives(),該方法用于獲得所有可用驅(qū)動(dòng)器的列表訪(fǎng)問(wèn)在執(zhí)行上面的程序時(shí),若磁盤(pán)沒(méi)有準(zhǔn)備好,或者機(jī)器上有虛擬磁盤(pán)等,會(huì)導(dǎo)致出現(xiàn)異常,此時(shí)可以利用try-catch來(lái)檢測(cè)異常。訪(fǎng)問(wèn)目錄的訪(fǎng)問(wèn)需要借助于Directory類(lèi)和DirectoryInfo類(lèi)來(lái)實(shí)現(xiàn)。Directory類(lèi)的常用方法目錄訪(fǎng)問(wèn)方法說(shuō)明CreateDirectory()創(chuàng)建一個(gè)新目錄Delete()刪除一個(gè)目錄Exists()確定目錄是否存在。如果將目錄路徑傳遞給該方法,它會(huì)返回一個(gè)bool值以表明目錄是否存在。這是Directory類(lèi)中最常用的方法,并且通常和if語(yǔ)句配合使用GetFiles()獲取目錄中的文件的列表GetDirectories()獲取目錄中的子目錄的列表GetLogicalDrives()獲取本地計(jì)算機(jī)上的邏輯驅(qū)動(dòng)器的列表GetParent()獲取指定目錄的父目錄Move()將目錄移動(dòng)到另一個(gè)位置訪(fǎng)問(wèn)DirectoryInfo類(lèi)的常用屬性是Name和FullName。Name屬性獲取目錄的名稱(chēng),F(xiàn)ullName屬性獲取目錄的名稱(chēng)以及完整路徑目錄訪(fǎng)問(wèn)DirectoryInfo類(lèi)的常用方法屬性說(shuō)明Create()創(chuàng)建一個(gè)目錄CreateSubDirectory()為當(dāng)前目錄創(chuàng)建子目錄GetDirectories()獲取當(dāng)前目錄中的子目錄的列表GetFiles()獲取當(dāng)前目錄中的文件的列表MoveTo()將目錄移動(dòng)到另一個(gè)位置Delete()刪除一個(gè)目錄下面首先看文件夾的創(chuàng)建、存在性檢測(cè)及刪除訪(fǎng)問(wèn)文件夾下文件的遍歷是個(gè)常見(jiàn)應(yīng)用,比如播放器搜索指定目錄下所有mp3文件、清除系統(tǒng)垃圾文件、文件搜索等功能都離不開(kāi)文件的遍歷。下面的代碼演示了如何遍歷C盤(pán)下的子文件夾及文件訪(fǎng)問(wèn)文件的訪(fǎng)問(wèn)需要借助于File類(lèi)和FileInfo類(lèi)來(lái)實(shí)現(xiàn)文件訪(fǎng)問(wèn)File類(lèi)的常用方法方法含義Create()創(chuàng)建一個(gè)文件Copy()復(fù)制一個(gè)文件Delete()刪除一個(gè)文件Exists()確定文件是否存在。需要將文件路徑傳遞給該方法,然后它將返回一個(gè)bool值以表明文件是否存在。這是File類(lèi)中最常用的方法,并且通常和if語(yǔ)句一起使用Move()移動(dòng)一個(gè)文件Replace()用另一個(gè)文件替換或改寫(xiě)某個(gè)文件AppendText()創(chuàng)建StreamWriter類(lèi),將該類(lèi)配置為在指定的文件中追加文本Open()以FileStream打開(kāi)指定的文件,然后,可以使用FileStream類(lèi)的對(duì)象將文本寫(xiě)入該文件ReadAllText()打開(kāi)文件,讀取文件中的所有文本,將讀取的文本存儲(chǔ)到字符串變量中,然后關(guān)閉該文件WriteAllText()創(chuàng)建一個(gè)新文件或改寫(xiě)一個(gè)現(xiàn)有文件,將字符串變量的內(nèi)容寫(xiě)入文件,然后關(guān)閉該文件ReadAllLines()打開(kāi)文件,讀取文件中的所有文本,將讀取的文本存儲(chǔ)到字符串?dāng)?shù)組中,然后關(guān)閉該文件WriteAllLines()創(chuàng)建一個(gè)新文件或改寫(xiě)一個(gè)現(xiàn)有文件,將字符串?dāng)?shù)組的內(nèi)容寫(xiě)入文件,然后關(guān)閉該文件訪(fǎng)問(wèn)FileInfo類(lèi)的常用屬性有Directory、Length和Name。Directory屬性獲取包含文件的目錄,Length屬性獲取文件的大小,Name屬性獲取文件的名稱(chēng)文件訪(fǎng)問(wèn)FileInfo類(lèi)的常用方法方法說(shuō)明Create()創(chuàng)建一個(gè)文件AppendText()創(chuàng)建StreamWriter類(lèi)以向文件追加文本Open()打開(kāi)一個(gè)文件CopyTo()將文件復(fù)制到一個(gè)新文件并且可以選擇改寫(xiě)任何現(xiàn)有文件Delete()刪除一個(gè)文件MoveTo()將文件移動(dòng)到一個(gè)新目錄。如果新目錄中已經(jīng)存在同名文件,則將引發(fā)異常Replace()用當(dāng)前FileInfo指代的文件內(nèi)容替換作為參數(shù)傳入的文件這兩個(gè)類(lèi)的使用方式與Directory和DirectoryInfo類(lèi)似,只是這里是針對(duì)文件的創(chuàng)建、刪除、檢測(cè)等操作而已。此處僅給出讀寫(xiě)文件的簡(jiǎn)單演示代碼。訪(fǎng)問(wèn)創(chuàng)建WinForm項(xiàng)目,在窗體上放置一個(gè)RichTextBox和兩個(gè)Button上述示例使用File類(lèi)的兩個(gè)方法可以完成簡(jiǎn)單文本文件的讀寫(xiě)操作。注意上述的test.txt文件應(yīng)該保存為Unicode格式,否則會(huì)出現(xiàn)亂碼。當(dāng)然,也可以根據(jù)test.txt文件的真實(shí)編碼來(lái)讀取,只是此時(shí)應(yīng)該使用ReadAllText()方法的另外一種重載方式。假如test.txt編碼為gb2312,則讀取的代碼如圖所示。相應(yīng)地,寫(xiě)文件的時(shí)候也可以選用另外一種重載形式實(shí)現(xiàn)指定的編碼存儲(chǔ)文件。訪(fǎng)問(wèn)上述功能還可以通過(guò)ReadAllLines和WriteAllLines來(lái)實(shí)現(xiàn)實(shí)際的文本文件讀寫(xiě)過(guò)程中,究竟是使用ReadAllText/WriteAllText還是ReadAllLines/WriteAllLines,可根據(jù)具體需求來(lái)選定(即操控的對(duì)象是文本還是數(shù)組)。路徑02PART路徑路徑的操作處理是借助于Path類(lèi)來(lái)完成的路徑Path類(lèi)的常用屬性屬性說(shuō)明PathSeparator表示當(dāng)多個(gè)路徑字符串連接在一起時(shí),用于分割每個(gè)文件或目錄路徑的字符;通常,當(dāng)為搜索指定了多個(gè)路徑時(shí),使用該屬性;Windows使用的默認(rèn)字符為分號(hào)(;)InvalidPathChars表示一個(gè)數(shù)組,它包含不能用于路徑字符串的字符DirectorySeparatorChar表示用于分隔路徑字符串的目錄段的字符;Windows使用的默認(rèn)字符為反斜杠(\)VolumeSeparatorChar表示用于將驅(qū)動(dòng)器盤(pán)符與字符串路徑的其余部分進(jìn)行分隔的字符;Windows使用的默認(rèn)字符為冒號(hào)(:)路徑路徑Path類(lèi)的常用方法方法說(shuō)明GetDirectoryName()從包括驅(qū)動(dòng)器盤(pán)符或文件名的路徑中檢索目錄段GetExtension()獲取某個(gè)指定文件路徑中的文件的擴(kuò)展名。例如,可以使用該方法得到要檢索的文件的類(lèi)型,從而可以使用正確的應(yīng)用程序?qū)⑵浯蜷_(kāi)GetFileName()獲取某個(gè)指定文件路徑中的文件名,包括擴(kuò)展名GetFullPath()獲取指定文件路徑的絕對(duì)路徑,包括驅(qū)動(dòng)器盤(pán)符和目錄段。如果僅向本方法傳遞文件名,則將在返回的文件名之前加上當(dāng)前目錄的驅(qū)動(dòng)器盤(pán)符和目錄段GetRandomFileName()獲取一個(gè)強(qiáng)加密的隨機(jī)名稱(chēng),可把它用于目錄或文件的命名GetTempPath()獲取本地操作系統(tǒng)用于存儲(chǔ)臨時(shí)文件的目錄路徑示例路徑Stream類(lèi)03PARTStream類(lèi)支持在同一個(gè)流中既可以進(jìn)行同步讀寫(xiě),也可以進(jìn)行異步讀寫(xiě)。該類(lèi)是一個(gè)抽象類(lèi),它提供了BeginRead()、BeginWrite()、EndRead()、EndWrite()、Read()、Write()、Seek()等成員方法,協(xié)同完成對(duì)流的讀寫(xiě)操作文件處理流Stream類(lèi)Stream類(lèi)讀寫(xiě)操作由于上述方法都是虛方法,故自己設(shè)計(jì)Stream類(lèi)的派生類(lèi)時(shí),應(yīng)該重載這些方法,并同時(shí)設(shè)計(jì)它們同步和異步的執(zhí)行代碼。BeginRead()、EndRead()、BeginWrite()和EndWrite()方法默認(rèn)提供了異步讀寫(xiě)操作方式。Stream類(lèi)還提供了ReadByte()和WriteByte()方法用于一次讀寫(xiě)一個(gè)字節(jié)。它們?cè)谀J(rèn)情況下實(shí)際上是調(diào)用了Read()和Write()方法的同步操作,異步讀寫(xiě)B(tài)eginRead()EndRead()BeginWrite()EndWrite()同步讀寫(xiě)Read()Write()概念FileStream類(lèi)可以完成文件的讀寫(xiě)操作,它是一個(gè)比較“底層”的流類(lèi),故可由BinaryReader、StreamReader等進(jìn)行“包裝”后,再完成對(duì)文件的操作CanRead判斷是否可讀Length確定長(zhǎng)度CanSeek是否可以直接訪(fǎng)問(wèn)流中的某個(gè)位置Position確定位置CanWrite判斷是否可寫(xiě)Stream類(lèi)FileStream常用屬性概念FileStream類(lèi)可以完成文件的讀寫(xiě)操作,它是一個(gè)比較“底層”的流類(lèi),故可由BinaryReader、StreamReader等進(jìn)行“包裝”后,再完成對(duì)文件的操作CanRead判斷是否可讀Length確定長(zhǎng)度CanSeek是否可以直接訪(fǎng)問(wèn)流中的某個(gè)位置Position確定位置CanWrite判斷是否可寫(xiě)Stream類(lèi)FileStream常用屬性使用File類(lèi)如File.Create(fileName)、File.OpenRead(fileName)、File.Open()和File.OpenWrite()使用FileInfo其方法同F(xiàn)ile類(lèi)自身構(gòu)造函數(shù)FileStream的構(gòu)造函數(shù)Stream類(lèi)FileStream對(duì)象獲取的常用方法Stream類(lèi)FileMode、FileAccess和FileShare枚舉值枚舉意義典型取值FileMode定義如何打開(kāi)文件Open:打開(kāi)現(xiàn)有文件,不存在則引發(fā)異常OpenOrCreate:打開(kāi)現(xiàn)有文件,不存在則創(chuàng)建Append:將新數(shù)據(jù)寫(xiě)到現(xiàn)有文件末尾Create:創(chuàng)建文件,若已存在則刪除文件內(nèi)容CreateNew:創(chuàng)建文件,若已存在則引發(fā)異常Truncate:打開(kāi)現(xiàn)有文件并刪除其內(nèi)容(不會(huì)刪除文件本身),文件指針置于0,不存在則引發(fā)異常FileAccess定義對(duì)文件進(jìn)行訪(fǎng)問(wèn)時(shí)允許的操作Read:流可以對(duì)文件進(jìn)行讀操作Write:流可以對(duì)文件進(jìn)行寫(xiě)操作ReadWrite:流可以對(duì)文件進(jìn)行讀寫(xiě)操作FileShare定義在文件共享時(shí)的選項(xiàng)None:除當(dāng)前流,其他流不能對(duì)文件進(jìn)行操作Read:其他流可以對(duì)文件進(jìn)行讀操作Write:其他流可以對(duì)文件進(jìn)行寫(xiě)操作ReadWrite:其他流可以對(duì)文件進(jìn)行讀寫(xiě)操作Stream類(lèi)FileStream常用方法方法說(shuō)明Close()關(guān)閉操作Read()讀入操作ReadByte()一次讀一個(gè)字節(jié)Write()寫(xiě)入操作WriteByte()一次寫(xiě)一個(gè)字節(jié)示例Stream類(lèi)FileStream的寫(xiě)操作。FileStream用于寫(xiě)操作時(shí)其作用在于把byteArray字節(jié)數(shù)組中的數(shù)據(jù)寫(xiě)入fs流,其中fs為FileStream的實(shí)例參數(shù)說(shuō)明參數(shù)說(shuō)明參數(shù)1數(shù)據(jù)源頭,即為寫(xiě)操作提供數(shù)據(jù)的字節(jié)數(shù)組參數(shù)2從byteArray中的第startIndex個(gè)開(kāi)始寫(xiě),此前的0,1,…,startIndex-1都不會(huì)寫(xiě)入。如果參數(shù)2的值大于byteArray字節(jié)數(shù)組的長(zhǎng)度,則引發(fā)異常參數(shù)3代表寫(xiě)入多少個(gè)字節(jié)。如果參數(shù)3的值大于byteArray字節(jié)數(shù)組的長(zhǎng)度,則引發(fā)異常Write()方法的原理Stream類(lèi)示例Stream類(lèi)上面示例中輸出文件的內(nèi)容已經(jīng)在注釋當(dāng)中。以“fs.Write(info,5,4);”為例,從第5個(gè)索引位置開(kāi)始寫(xiě),即從6開(kāi)始(1的索引為0),寫(xiě)4個(gè)字節(jié),故輸出為6789。從這里可以看出,F(xiàn)ileStream可以以字節(jié)數(shù)組的方式操作數(shù)據(jù),故很靈活,功能強(qiáng)大。示例Stream類(lèi)對(duì)代碼進(jìn)行如下的修改替換代碼在上步的替換完成后示例Stream類(lèi)FileStream的讀操作其作用是:將fs流中的數(shù)據(jù)讀到byteArray中,其中,fs為FileStream的實(shí)例。該方法執(zhí)行完畢,返回一個(gè)int,代表真實(shí)讀取的字節(jié)數(shù),因?yàn)榇x取的數(shù)據(jù)有可能不足一次讀取的最大量n,當(dāng)待讀取字節(jié)數(shù)據(jù)小于n時(shí),此時(shí)number<n,否則number=n。由于每次都將從fs流當(dāng)中讀取n字節(jié)的數(shù)據(jù)存儲(chǔ)到byteArray中,因此,n的值應(yīng)該不大于byteArray的Length值,否則將引發(fā)異常。雖然n值可以取小于byteArray的Length值,但是一般習(xí)慣保持兩個(gè)值相等。當(dāng)n值小于byteArray的Length值時(shí),不會(huì)引發(fā)異常,并且也基本可以正常完成讀取,但是在每次讀取的內(nèi)容后面都會(huì)有若干個(gè)“\0”,當(dāng)作為字符串顯示時(shí),會(huì)顯示為空格。Stream類(lèi)參數(shù)說(shuō)明參數(shù)說(shuō)明參數(shù)1讀取的數(shù)據(jù)的臨時(shí)存放區(qū),讀取流的存儲(chǔ)緩沖參數(shù)2把流fs中讀取的數(shù)據(jù)從byteArray的第writePos個(gè)位置寫(xiě)入byteArray中參數(shù)3每次從fs中讀取的字節(jié)數(shù),但是不一定能讀到這么多字節(jié),有可能實(shí)際讀取的字節(jié)數(shù)小于該參數(shù),具體讀取量由其返回值number確定Read()方法如圖所示示例Stream類(lèi)Stream類(lèi)StreamReader成員說(shuō)明Close()關(guān)閉StreamReader的對(duì)象和相應(yīng)的流,并且釋放與其對(duì)象相關(guān)的任何系統(tǒng)資源Peek()返回下一個(gè)可用的字符但不使用它Read()從流中讀取下一個(gè)字符ReadLine()從當(dāng)前流讀取一行字符,并且返回?cái)?shù)據(jù)為字符串Seek()允許在文件內(nèi)移動(dòng)讀/寫(xiě)位置到任何地方StreamReader的常用方法Stream類(lèi)StreamWriterStreamWriter的常用方法成員說(shuō)明Close()關(guān)閉當(dāng)前StreamWriter的對(duì)象和相應(yīng)的流Flush()清除當(dāng)前writer的所有緩沖,導(dǎo)致任何緩沖的數(shù)據(jù)被寫(xiě)入相應(yīng)的流Write()寫(xiě)入流WriteLine()寫(xiě)入重載參數(shù)指定的某些數(shù)據(jù),后跟行結(jié)束符示例寫(xiě)數(shù)據(jù)Stream類(lèi)示例文件讀取BinaryReaderBinaryWriterFileStream比較“底層”,功能強(qiáng)大,但操作復(fù)雜。為了方便讀寫(xiě),需要使用其它數(shù)據(jù)類(lèi)型來(lái)完成與字節(jié)流的轉(zhuǎn)換。BinaryReader和BinaryWriter用于按二進(jìn)制模式讀寫(xiě)文件。它們提供的一些讀
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貧困證明申請(qǐng)書(shū)
- 防震防火逃生演練心得體會(huì)
- 銀行培訓(xùn)心得體會(huì)15篇
- 道路交通安全講話(huà)稿(15篇)
- 針刺傷預(yù)防與處理
- 金屬冶煉負(fù)責(zé)人安管人員培訓(xùn)
- 人教遼寧 九年級(jí) 下冊(cè) 語(yǔ)文 第五單元《 任務(wù)二 準(zhǔn)備與排練》習(xí)題課 課件
- 褥瘡的治療與護(hù)理
- 人教陜西 九年級(jí) 下冊(cè) 語(yǔ)文 第一單元《 活動(dòng) 探究》習(xí)題課 課
- 人教陜西 九年級(jí) 下冊(cè) 語(yǔ)文 第五單元《 屈原(節(jié)選)》習(xí)題課 課件
- XX學(xué)校初高貫通銜接培養(yǎng)實(shí)施方案
- 新聞宣傳“三審三?!睂彶楸?/a>
- 《蟬》虞世南課件
- 私募股權(quán)投資業(yè)務(wù)激勵(lì)管理辦法
- 礦山三級(jí)安全教育培訓(xùn)課件
- 教師資格之中學(xué)音樂(lè)學(xué)科知識(shí)與教學(xué)能力試題附答案(得分題)
- 部編新人教版三年級(jí)數(shù)學(xué)下冊(cè)獲獎(jiǎng)?wù)n件-《復(fù)式統(tǒng)計(jì)表》-1
- 武士與龍【經(jīng)典繪本】
- 內(nèi)蒙古包頭市2022年中考物理試卷【含答案】
- 日間手術(shù)管理制度考核試題及答案
- avolites tiger touch ii v7.0操作說(shuō)明書(shū)添加面板按鍵介紹
評(píng)論
0/150
提交評(píng)論