c 中對檔案的操作小結

2021-09-05 14:45:22 字數 2388 閱讀 7748

你平時是怎麼讀取檔案的?使用流讀取。是的沒錯,c#給我們提供了非常強大的類庫(又一次吹捧了.net一番),裡面封裝了幾乎所有我們可以想到的和我們沒有想到的類,流是讀取檔案的一般手段,那麼你真的會用它讀取檔案中的資料了麼?真的能讀完全麼?

通常我們讀取乙個檔案使用如下的步驟:

1、宣告並使用file的openread例項化乙個檔案流物件,就像下面這樣

filestream fs = file.openread(filename);

或者filestream fs = filestream(filename, filemode.open, fileaccess.read, fileshare.read);

2、準備乙個存放檔案內容的位元組陣列,fs.length將得到檔案的實際大小,就像下面這樣

byte data = new byte[fs.length];

3、哇!開始讀了,呼叫乙個檔案流的乙個方法讀取資料到data陣列中

fs.read (data, 0, data.length);

呵呵!我們只寫了3句就可以把檔案裡面的內容原封不動的讀出來,真是太簡潔了!可以這段**真的能像你預期的那樣工作麼?答案是:幾乎可以!在大部分情況下上面的**工作的很好,但是我們應該注意read方法是有返回值的,既然有返回值那麼一定有其道理,如果按照上面的寫法完全可以是乙個沒有返回值的函式。我想返回值的目的是,為了給我們乙個機會判斷實際讀取檔案的大小,從而來判斷檔案是否已經完全讀完。所以上面的**不能保證我們一定讀完了檔案裡面的所有位元組(雖然在很多情況下是讀完了)。下面的方法提供了乙個比上面方法更安全的方法,來保證檔案被完全讀出

public static void saferead (stream stream, byte data)

}有些情況下你不知道流實際的長度比如:網路流。此時可以使用類似的方法讀取流直到流裡面的資料完全讀取出來為止。我們可以先初始化一段快取,再將流讀出來的流資訊寫到記憶體流裡面,就像下面這樣:

public static byte readfully (stream stream)}}

雖然上面的例子都比較簡單,效果也不是很明顯(大部分都是對的),也許你早就會了,沒關係這篇文章本來就是寫給初學者的。

下面的方法提供了一種使用指定快取長度的方式讀取流,雖然在很多情況下你可以直接使用stream.length得到流的長度,但是不是所有的流都可以得到。

public static byte read2buffer (stream stream, int bufferlen)

// 初始化乙個快取區

byte buffer = new byte[bufferlen];

int read=0;  

int block;

// 每次從流中讀取快取大小的資料,知道讀取完所有的流為止

while ( (block = stream.read(buffer, read, buffer.length-read)) > 0)

// 調整陣列大小準備繼續讀取

byte newbuf = new byte[buffer.length*2];

array.copy(buffer, newbuf, buffer.length);

newbuf[read]=(byte)nextbyte;

buffer = newbuf;// buffer是乙個引用(指標),這裡意在重新設定buffer指標指向乙個更大的記憶體

read++;}}

// 如果快取太大則使用ret來收縮前面while讀取的buffer,然後直接返回

byte ret = new byte[read];

array.copy(buffer, ret, read);

return ret;

}我現在想從檔案中讀取一些資料,每一行是乙個物件的所有資料,用空格隔開

例如:1 張三 2 4.5 6

這種形式,想把一行讀入乙個例項的相應屬性,這個用c的話,很方便就可以讀出來,用c#就沒那麼方便了

剛學習c#,很多不懂的地方,哪位大俠可以指點一下,用比較簡單的讀出這些資料,謝謝

定義乙個類,類的結構必須與讀出的內容對應

class userclass

streamreader read = new streamreader("檔名");    

//利用streamreader 進行一行資料的讀取

string s  =read.readline();

string user = s.split(" ");//按空格將字串分割成字串陣列

userclass uc = new userclass();

uc.id = convert.toint32(user[0]);

uc.name = user[1];

uc.a = user[2];

uc.b = user[3];

uc.c = user[4]; 

C 對檔案操作小結

private void button2 click object sender,eventargs e private void button1 click object sender,eventargs e 流檔案操作 filestream fs new filestream filepath,...

C 中對檔案的操作

學c的時候我們就接觸過如何讀寫檔案,c 中存在c 風格的檔案讀寫,同時也支援c風格的讀寫檔案.這是io類庫的基本結構,箭頭表示該類從何處繼承.檔案的開啟模式標記代表了檔案的使用方式,這些標記可以單獨使用,也可以組合使用,組合使用時,用 將其連線 模式標記 適用物件 作用ios in ifstream...

C 對檔案操作

c 建立目錄 建立目錄c sixage directoryinfo d directory.createdirectory c sixage d1指向c sixage sixage1 directoryinfo d1 d.createsubdirectory sixage1 d2指向c sixage...