流是序列化裝置的抽象表示。
一、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的總量 使用量 剩餘量,以及檔案...