2012-06-27 33 views
0

我有一個應用程序逐行讀取一個巨大的文本文件(大約超過100MB)。通過閱讀它的行來確定文件的大小

由於應用程序需要花費很多時間來讀取文件,我想在其底部添加一個StatusStripProgressBar,指示在加載結束之前還剩多少時間。

我試圖比較文件長度與正在讀取的字符串的長度,但我沒有得到相同的結果。我也試圖將字符串轉換爲字節,但它仍然有所不同,例如:

while (!sr.EndOfStream) 
{ 
    s = sr.ReadLine; 
    TotalStringSize += s.Length; 
    UTF8ToASCII += UTF8Encoding.ASCII.GetByteCount(s); 
    UTF8ToBigEndianUnicode += UTF8Encoding.BigEndianUnicode.GetByteCount(s); 
    UTF8ToDefault += UTF8Encoding.Default.GetByteCount(s); 
    UTF8ToUnicode += UTF8Encoding.Unicode.GetByteCount(s); 
    UTF8ToUTF32 += UTF8Encoding.UTF32.GetByteCount(s); 
    UTF8ToUTF7 += UTF8Encoding.UTF7.GetByteCount(s); 
    UTF7ToASCII = UTF7Encoding.ASCII.GetByteCount(s); 
    // 
    // ... 
    // 
} 

我得到的結果要麼是比System.IO.FileStream.Length給出的結果更高或更低。 有什麼想法?

編輯:使用的框架是.NET 2.0

+0

Unicode字符存儲在2個字節中,而普通字符只存儲在一個字節中。這一切都取決於你的文件的編碼類型 – GETah

+1

與sr.Length相比,使用sr.Position來顯示進度不是可能嗎? –

+0

加載時是否需要顯示文件的(已經加載的)內容? – stombeur

回答

0

從返回的字符串的條帶sr.ReadLine回車/換行字符耦合的。
您需要對返回字符串中缺少這些字符的計數進行計數,但該計數字符存在於整個文件長度中。

+0

不錯,我只是必須在每個循環中添加這兩個字符,並完成這項工作。謝謝! – GianT971

+0

好點。是否有可能OP還必須與FileInfo.Length比較,而不是像這裏所述的流長度比較:http://stackoverflow.com/questions/5959983/how-to-check-logical-and-physical-file-size-on -disk-using-c-sharp-file-api? – stombeur