2012-01-09 78 views
0

我有一個100MB的磁盤文件(可以高達300MB)。有空值和一些其他控制字符不應該在那裏。起初,我將字符串讀入內存,然後通過Char重新讀取它,然後刪除有問題的Chars,並將乾淨的東西放入一個StringBuilder中,然後在其上做一個ToString。高效地從FILE中刪除一些ASCII碼?

當然使用太多內存。我需要弄清楚如何去除磁盤上的壞ASCII值。也許(.NET 4)內存映射文件流是正確的(我前面從Memory Mapped File to Read End of File?檢查了這一點)?

所有的想法讚賞。謝謝。

+0

你需要刪除和重新排序文件,或者你可以用空格替換壞字符以保持相同長度? – 2012-01-09 22:18:41

+0

我可以用String.Empty替換不好的字符,因爲它們大多是空字符和製表符。 – Snowy 2012-01-09 22:22:39

+0

爲什麼你不直接寫入輸出文件?沒有理由一次將整個輸出存儲在內存中。 – 2012-01-09 22:44:10

回答

0

如果您需要縮小文件以刪除錯誤的字符,那麼只需一次讀取字符或數據塊中的文件,然後將其寫入到跳過壞字符的新文件中。
這也給你一個撤消!

如果您可以替換壞字符,以便文件的長度不會更改,則映射文件並掃描內存,用空格替換每個壞字符(ascii 32)。這是最簡單的,可能更快 - 但無論哪種方式,你將被原始磁盤I/O控制

+0

你有關於如何做到這一點的示例(僞代碼或真實代碼)? – Snowy 2012-01-10 01:44:43