Jack s Notes2 檔案系統資料操作

2021-06-07 04:48:07 字數 3989 閱讀 3011

流是序列化裝置的抽象表示。

一、system.io命名空間中包含的類:

重點的類如下:

file

directory

path

fileinfo

directoryinfo

filestreaminfo

filestream

streamreader

streamwriter

filesystemwatcher

二、file類常用的靜態方法:

copy() 將檔案從原位置複製到目標位置

create() 在指定的路徑上建立檔案

delete()

open() 返回指定路徑上的filestream物件

move()

三、directory類常用的靜態方法:

createdirectory()

delete() 刪除指定的目錄及其中的所有檔案

getdirections()

enumeratedirectories() 與getdirectories()類似,但返回目錄名的ienumerable集合

getfiles()

enumeratefiles()

getfilesystementries() 返回在指定目錄中的檔案和目錄名的string物件陣列

enumeratefilesystementries()

move()

四、fileinfo類

fileinfo類不像file類,它不是靜態的,沒有靜態方法,僅可用於例項化的物件。fileinfo物件表示磁碟或網路位置上的檔案。提供檔案路徑就可以建立乙個fileinfo物件:

fileinfo afile = new fileinfo(@」c:\log.txt」);

fileinfo和file,在大多數情況下使用什麼技術並不重要,但下面的規則有助於確定哪種技術更適合:

l如果僅進行單一方法的呼叫,則可以使用靜態file類的方法。在此,單一呼叫要快一些,因為.net framework不必例項化新物件,再呼叫方法。 l

如果應用程式在檔案上執行幾種操作,則例項化fileinfo物件並使用其方法就更好一些。這節省時間,因為物件已經在檔案系統上引用正確的檔案,而靜態類必須每次都尋找檔案。

fileinfo類也提供了與底層相關的屬性,其中一些屬性可以用來更新檔案,其中很多屬性都繼承者自filesysteminfo,所以可以應用於file和directory類。

filesystem類的屬性如下:

attributes  使用fileattributes列舉,獲取或設定當前檔案或目錄的特性

creationtime,creationtimeutc  獲取當前檔案的建立日期和時間,可以用utc和非utc版本

extension  提取副檔名,唯讀

exists

fullname 索取檔案的完整路徑,唯讀

lastaccesstime  獲取或設定上次訪問當前檔案的日期和時間,

可以使用

utc和非utc版本

lastaccesstimeutc

lastwritetime  獲取或設定上次寫入當前檔案的日期和時間,可以使用utc和非utc版本

lastwritetimeutc

name  索取檔案的完整路徑,唯讀抽象屬性,在fileinfo和directoryinfo中進行了重寫

fileinfo的專用屬性:

directory  檢索乙個directoryinfo物件,表示包含當前檔案的目錄。唯讀

directoryname  返回檔案目錄的路徑。唯讀

isreadonly  檔案唯讀特定的快捷方式。這個屬性也可以通過attributes來訪問

length  獲取檔案容量(以位元組為單位),返回long值。唯讀

fileinfo物件本身不表示流。要讀寫檔案,必須建立stream物件。fileinfo物件提供了幾個返回例項化stream物件的方法來幫助做到這一點。

五、directoryinfo類

directoryinfo專用屬性

parent  檢索乙個directoryinfo物件,表示包含當前目錄的目錄。唯讀

root  根目錄

可以使用directory.getcurrentdirectory()找出工作目錄的當前設定,也可以使用directory.setcurrentdirectory()設定新路徑。

六、filestream物件

這個類提供了在檔案中讀寫位元組的方法,但經常使用streamreader或streamwriter執行這些功能。這是因為filestream類操作的是位元組和位元組陣列,而stream類操作的是字元資料。字元資料易於使用。但有些操作,如隨機檔案訪問(訪問檔案中間某點的資料),就必須由filestream物件執行。

建構函式:

(1)filestream afile = new filestream(filename,filemode.member);

filemode列舉指定了如何開啟或建立檔案

(2)filestream afile = new filestream(filename,filemode.member,fileaccess.member);

fileaccess列舉指定了流的作用,其成員有read、write、readwrite

file和fileinfo類都提供了openread()和openwrite()方法,更易於建立filestream物件。

seek()方法實現了隨機讀取

處理原始位元組的功能使filestream類可以用於任何資料檔案,而不僅是文字檔案。

filestream物件的read()方法獲取的位元組陣列可以使用system.text命名空間的decoder類轉為字元陣列。例:

decoder d = encoding.utf8.getdecoder();

d.getchars(bydata,0,bydata.length,chardata,0);

向隨機檔案寫入資料,首先要建立乙個位元組陣列;最簡單的辦法是首先用string類的tochararray()靜態方法構建要寫入檔案的字元陣列,然後使用encoder物件將其轉為位元組陣列。例:

chardata = 「my pink half of the drainpipe.」.tochararray();

encoder e = encoding.utf8.getencoder();

e.getbytes(chardata,0,chardata.length,bydata,0,true);

七、序列化物件

.net framework在system.runtime.serialization和system.runtime.serializaioin.formatter命名空間中提供了序列化物件的基礎架構。

system.runtime.serialization.formatters.binary:這個命名空間包含了binaryformatter類,它能把物件序列化為二進位制資料,把二進位制資料序列化為物件。

iformatter介面提供了如下兩個方法:

void serialize(stream stream,object source)

object deserialize(stream stream)

使用binaryformatter進行序列化非常簡單:

iformatter serializer = new binaryformatter();

serializer.serialize(mystream,myobject);

反序列化也很簡單:

iformatter serializer = new binaryformatter();

myobjecttype mynewobject = serializer.deserialize(mystream) as myobjecttype;

linux檔案系統 ext2檔案系統

如何快速高效的尋到在硬碟儲存的資料,於是檔案系統就誕生了。檔案系統是邏輯層面的,那麼檔案系統是如何管理 件層提供的磁碟空間的?現在,大部分檔案系統採用索引分配方案 優點 1.能夠保持好大部分檔案的區域性性 2.滿足檔案插入,刪除的高效 3.隨機讀寫不需要沿著指標前行 缺點1.會有較多的磁碟尋道次數 ...

ext2檔案系統

ext2磁碟結構 ext2分割槽和ext2分組的分布圖 下圖是借用其他部落格的 塊組中的每個塊包含的資訊 超級快 1個塊 描述該分割槽中的整個檔案系統的資訊,包括有多少個快組,每個快組有多少個塊,多少個索引節點等。組描述符塊 n塊 塊點陣圖 1塊 索引節點位圖 1塊 索引節點 n塊 資料塊 n塊 塊...

Linux EXT2 檔案系統

1.ext2 檔案系統 ext2檔案系統最前面有乙個啟動區,這個啟動扇區可以安裝引導裝載程式。其餘部分被分成塊組 block group 示意圖如下 塊組中的每一塊包含下列資訊之一 1 超級塊 super block 記錄檔案系統的整體資訊,包括inode block的總量 使用量 剩餘量,以及檔案...