2013-04-09 67 views
0

我試圖修改6 gig文本文件(SQL腳本)中的特定行。因此,我用IO.StreamReader.ReadLine讀取它,並用IO.StreamWriter.WriteLine寫入新文件。如果該行符合某個條件,我在寫入之前將其修改。複製文本文件一行一行vb.net一半大小?

的問題是,生成的文件正好是一半(1.999582 ...)的原始文件的大小...

我想,以確保編碼是一樣的使用:

sw = New IO.StreamWriter(NewFilepath, False, sr.CurrentEncoding)

不過,這並不有所作爲,新的文件是舊的一半大小...

+1

嗯,我會嘗試尋找與一個十六進制查看器的每個文件的第一部分。第二次嘗試:爲讀寫定義另一種編碼。從ascii開始,或者因爲一半大小,請嘗試utf8,然後使用utf16。也許讀者會在注意到某些不同時改變編碼,但只是假設可能是錯誤的 – Amegon 2013-04-09 22:22:30

+1

你可以發佈你的代碼嗎?你比較了這些文件嗎?通過前幾行的內容應該可以揭示出一些東西 - 在原始的十六進制編輯器中打開它們以查看改變了什麼。你是否缺少字符,字節或行等?如何測試較小的文件 - 調試簡短的東西? – 2013-04-10 00:47:02

+0

這絕對是一種編碼的東西......當我運行SQL腳本時,我注意到一些字符無法正確呈現(例如o頂部的雙點呈現爲不同的字符)。我只想知道如何在這種情況下從源文件到目標文件保留編碼...... – John 2013-04-11 17:28:07

回答

1

你在哪裏設置你的StreamReader,sr編碼?如果你沒有明確地做到這一點,並且如果你在執行任何你的文件的讀取(我最好的猜測)之前設置了StreamWriter的編碼,那麼StreamReader的CurrentEncoding可能會改變(它從源文件自動檢測)。

從MSDN上StreamReader.CurrentEncoding

通過電流讀出器中使用的當前的字符編碼。在第一次調用任何讀取方法 StreamReader後,值 可能會不同,因爲編碼自動檢測不會完成,直到調用第一個 Read方法。

要確定,你可以讀出與StreamReader的文件的第一行,然後編碼做:

sw = New IO.StreamWriter(NewFilepath, False, sr.CurrentEncoding) 
+0

哦,編碼檢測不會在第一次讀取後纔會完成......這就解釋了它。謝謝! – John 2013-04-15 13:17:24

相關問題