用c#讀取檔案內容中文是亂碼的解決方法:
//方法1:
streamreader din = new streamreader(@"c:/1.txt", system.text.encoding.getencoding("gb2312"));
string html = "";
while (din.peek() > -1)
din.close();
//方法2:
streamreader sr1 = new streamreader((system.io.stream)file.openread(filename), system.text.encoding.default);
html = "";
while (sr1.peek() > -1)
sr1.close();
//方法3:
streamreader objreader = new streamreader(@"c:/1.txt", system.text.encoding.getencoding("gb2312"));
string sline = "", html = "";
while (sline != null)
objreader.close();
csdn:如何有效的使用c#讀取檔案
你平時是怎麼讀取檔案的?使用流讀取。是的沒錯,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){
int offset=0;
int remaining = data.length;
// 只要有剩餘的位元組就不停的讀
while (remaining > 0){
int read = stream.read(data, offset, remaining);
if (read <= 0)
throw new endofstreamexception("檔案讀取到"+read.tostring()+"失敗!");
// 減少剩餘的位元組數
remaining -= read;
// 增加偏移量
offset += read;
有些情況下你不知道流實際的長度比如:網路流。此時可以使用類似的方法讀取流直到流裡面的資料完全讀取出來為止。我們可以先初始化一段快取,再將流讀出來的流資訊寫到記憶體流裡面,就像下面這樣:
public static byte readfully (stream stream){
// 初始化乙個32k的快取
byte buffer = new byte[32768];
using (memorystream ms = new memorystream()){ //返回結果後會自動**呼叫該物件的dispose方法釋放記憶體
// 不停的讀取
while (true){
int read = stream.read (buffer, 0, buffer.length);
// 直到讀取完最後的3m資料就可以返回結果了
if (read <= 0)
return ms.toarray();
ms.write (buffer, 0, read);
雖然上面的例子都比較簡單,效果也不是很明顯(大部分都是對的),也許你早就會了,沒關係這篇文章本來就是寫給初學者的。
下面的方法提供了一種使用指定快取長度的方式讀取流,雖然在很多情況下你可以直接使用stream.length得到流的長度,但是不是所有的流都可以得到。
public static byte read2buffer (stream stream, int bufferlen){
// 如果指定的無效長度的緩衝區,則指定乙個預設的長度作為快取大小
if (bufferlen < 1){
bufferlen = 0x8000;
// 初始化乙個快取區
byte buffer = new byte[bufferlen];
int read=0;
int block;
// 每次從流中讀取快取大小的資料,知道讀取完所有的流為止
while ( (block = stream.read(buffer, read, buffer.length-read)) > 0){
// 重新設定讀取位置
read += block;
// 檢查是否到達了快取的邊界,檢查是否還有可以讀取的資訊
if (read == buffer.length){
// 嘗試讀取乙個位元組
int nextbyte = stream.readbyte();
// 讀取失敗則說明讀取完成可以返回結果
if (nextbyte==-1){
return buffer;
// 調整陣列大小準備繼續讀取
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;
C 讀取檔案
using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.text using system.window...
C 檔案讀取
一.fileinfo類,檢視檔案屬性,建立檔案,移動檔案,重新命名檔案等資訊。directoryinfo類,用來獲取資料夾的資訊。二.file讀寫檔案,file.readalllines 讀取所有行string陣列 file.readalltext 讀取整個檔案string file.readall...
C 檔案讀取
建議從結尾開始看可能不會迷糊,哈哈 剛開始寫部落格,多多指教!嘿嘿 1 在cfolderopt類裡面定義乙個判斷檔案或目錄的成員函式 判斷檔案或目錄是否存在 bisdircheck true 表示為目錄 bisdircheck false 表示為檔案 bool cfolderopt isfileex...