C 成魔之路 10 檔案及資料流技術 3

2021-07-10 09:02:55 字數 4547 閱讀 2136

1、資料流操作

資料流提供了一種向後被儲存寫入位元組和從後被儲存讀取位元組的方式,他是在.net中執行讀寫檔案操作時的一種非常重要的介質。

(1)流操作類介紹

.net使用流來支援讀取和寫入檔案,開發人員可以將流視為一組連續的一維資料,包含開頭和結尾,並且其中的游標指示了流中的當前位置。

流操作

流中包含的資料可能來自記憶體、檔案或tcp/ip套接字,流包含一下幾種可以應用於自身的基本操作:

讀取:將資料從流傳輸到資料結構(字串或者位元組陣列)中。

寫入:將資料從資料來源傳輸到流中。

查詢:查詢和修改在流中的位置。

流的型別

在.net中,流必須由stream類來表示,該類構成了所有其他流的抽象類。不能直接建立stream類的例項,但是必須使用它實現的其中乙個類。

c#中有許多態別的流,但在處理檔案輸入/輸出(i/o)時候,最重要的型別為filestream類,他是提供讀取和寫入檔案的方式。可在處理檔案i/o的時候使用的其他流主要包含bufferedstream、crypyostream、memorystream和networkstream等。

(2)檔案流類

c#中,檔案流類使用filestream類表示,該類公開以檔案為主的stream,表示在磁碟或者網路路徑上指向檔案的流。乙個filestream類的例項實際上代表乙個磁碟檔案,通過seek的方法進行對檔案的隨機訪問,也同時包含了流的標準輸入、標準輸出和標準錯誤等。filestream預設對檔案的開啟方式是同步的,但是他同樣也很好的支援非同步操作。

注意:filestream物件支援使用seek的方法對檔案進行隨機訪問,seek方法允許將讀取/寫入位置移動到檔案中的任意位置。

filestream類的常用屬性

canread:獲取乙個值,該值指示當前流是否支援讀取。

canseek:獲取乙個值,該值指示當前流是否支援查詢。

cantimeout:獲取乙個值,該值確定當前流是否可以超時。

canwrite:獲取乙個值,該值指示當前流是否支援寫入。

isasync:獲取乙個值,該值指示filestream是非同步還是同步開啟的。

length:獲取用位元組表示的流長度。

name:獲取傳遞給建構函式的filestream的名稱。

position:獲取或設定此流的當前位置。

readtimeout:獲取或設定乙個值,該值確定流在超時前嘗試讀取多長時間。

writetimeout:獲取或設定乙個值,該值確定流在超時前嘗試寫入多長時間。

filestream類的常用方法

beginread:開始非同步讀操作。

beginwrite:開始非同步寫操作。

close:關閉當前流並且釋放與其關聯的資源。

endread:等待掛起的非同步讀取完成。

endwrite:結束非同步寫入,在io操作完成之前一直阻止。

lock:允許讀取訪問的同時,防止其他程序更改filestream.

read:從流中讀取位元組塊並且將該資料寫入給定快取區。

readbyte:從檔案中讀取乙個位元組,並且將讀取位置提公升乙個位元組。

seek:將該流的當前位置設定為給定值。

setlength:將該流的長度設定為給定值。

unlock:允許其他程序訪問以前鎖定的某個檔案的全部或部分。

write:使用從緩衝區讀取的資料將位元組塊寫入該流。

fileaccess

示例:

filestream a=new filestream ("test.txt",filemode.openorcreate,fileaccess.readwrite);

//使用上面**的時候,text.txt檔案要放在程式執行目錄下,否則就需要給建構函式傳遞絕對路徑。

(3)文字檔案的寫入和讀取

streamwrite類

streamwrite類是專門處理文字檔案的類。可以方便向文字檔案中寫入字串,同時也負責重要的轉換和處理向filestream物件寫入工作。

注意:streamwriter類預設使用utf-8編碼來進行建立。

streamwriter類屬性

encoding:獲取將輸入寫入到其中的encoding。

formatprovider:獲取控制格式設定的物件。

newline:獲取或設定由當前textwriter使用的行結束符字串。

streamwriter類方法

close:關閉當前的stringwriter和基礎流。

writer:寫入到stringwrite的此例項。

writeline:寫入過載引數指定的某些資料,後跟行結束符。

streamwriter類有兩個最重要、最常用的方法:write方法,另乙個writeline。這兩個方法都是用來向文字檔案中寫入字串的。writeline方法只用於字串,並且會自動追加換行符。而write方法不追加換行符。而且可以向文字流寫入字串及任何基本資料型別的文字形式。

streamreader類

這個類專門進行讀取文字檔案的類。streamreader類可以從底層stream物件建立streamreader物件的例項,而且也能指定編碼規範引數。建立streamreader物件後,提供了許多用於讀取和瀏覽字元資料的方法。

streamreader類的常用方法:

close:關閉stringreader。

read:讀取輸入字串中的下乙個字元或下一組字元。

readblock:從當前流中讀取最大count的字元並從index開始將該資料寫入buffer。

readline:從基礎字串中讀取一行。

readtoend:將整個流,從流的當前位置到流的結尾作為字串讀取。

關於外掛程式openfiledialog

public

partial

class form1 : form

private

void

button1_click(object sender, eventargs e)

else}}

private

void

button2_click(object sender, eventargs e)

}private

void

form1_load(object sender, eventargs e)

}

(4)二進位制檔案的寫入和讀取

二進位制檔案的寫入和讀取主要是通過binarywriter類和binaryreader類來實現的,下面對這兩個類進行分析講解。

binarywriter類

binarywriter類以二進位制的形式將基元型別寫入流,並且支援用特定的編碼寫入字串,其常用的方法和說明如下:

close:關閉當前的binarywriter類和基礎流。

seek:設定當前流中的位置。

write:將值寫入當前流。

binaryreader類

binaryreader類用特定的編碼將基元資料型別讀作二進位制值,其常用方法和說明如下:

close:關閉當前閱讀器及基礎流.

peekchar:返回下乙個可用的字元,並且不提公升位元組或者字元的位置。

read:從基礎流中讀取字元,並且提公升流的當前位置。

readboolean:從當前流中讀取boolean值,並且使該流的當前位置提公升乙個位元組。

readbyte:從當前流中讀取下乙個位元組,並且使流的當前位置提公升乙個位元組。

readbytes:從當前流中讀取count個位元組讀入位元組陣列,並且使當前位置提公升count個位元組。

readchar:從當前流中讀取下乙個字元,並且根據encoding和從流中讀取的特定字元,提公升流的當前位置。

readchars:從當前流中讀取count個字元,以字元陣列的形式返回資料。並根據所使用的encoding和從流中讀取的特定字元,提公升流的當前位置。

readint32:從流中讀取4位元組有符號整數,並且使流的當前位置提公升4個位元組。

readstring:從流中讀取乙個字串。字串有長度字首,一次將七位編碼為整數。

示例程式:同上面的程式,不同方法,實現相同功能。

public

partial

class form1 : form

private

void

button1_click(object sender, eventargs e)

else}}

private

void

button2_click(object sender, eventargs e)

sr.close();

m.close();}}

private

void

form1_load(object sender, eventargs e)

}

10 檔案許可權

目錄許可權 r read contents in directory w modify contents of directory x access directory r x ls w x touch rm mv chmod x cd mkdir m 700 abc mkdir abc umask...

10 檔案上傳

引入 兩個包 上傳頁面表單如下 formaction control department list fileupload.action method post enctype multipart form data 檔案 inputtype file name image br inputtype...

C 學習筆記10 檔案IO

scanf 3d f x,y scanf確實可以設定輸入整數的寬度,3d表示取三位整數 printf也可以設定輸出整數的寬度,3d表示輸出至少3位,假如超過3位,有多少輸出多少。本題考查檔案操作函式,fseek用於二進位制方式開啟的檔案,移動檔案讀寫指標位置。將檔案內部的位置指標重新指向乙個流 資料...