2013-11-22 34 views
0

我试图摆脱中断数据的文本文件。我解析这个文件,如果我发现一个坏字符,我用一个空格替换它。我的问题是,空间不会覆盖坏字符。相反,该空间写在第10行的第27位。这里发生了什么? 我一直被困在这个看似简单的问题上半天。谢谢。如何用VB.NET中的空格替换文本文件中的'坏字符'

 Sub replaceChars(fname As String) 
     Dim fs As New FileStream(fname, FileMode.Open, FileAccess.ReadWrite) 
     Dim r As New StreamReader(fs) 
     Dim w As New StreamWriter(fs) 
     Dim iChar As Integer = 0 

     Do Until r.Peek() = -1 
      iChar = r.Read() 
      If iChar < 32 Or iChar > 126 Then 
      If iChar = 13 Or iChar = 10 Then 'cr/lf, continue. 
       Continue Do 
      Else 'found a bad char. replace it. 
       w.Write(Chr(32)) 
       w.Flush() 
       fs.Flush() 
      End If 
      Else 
      Continue Do 
      End If 
     Loop 
     w.Close() 
     fs.Close() 
     End Sub 
+2

的FileStream使用缓冲器,4096个字节默认情况下。第一次写入将抵消4096,而不是你希望它会去的地方。您无法使FileStream.Seek()对于文本文件可靠。完成后,将所有内容写入另一个文件File.Replace()。 –

+0

谢谢!我将这些行转换为char数组并替换了数组中的值。然后将char数组转换回字符串。正如你所建议的那样,我用一个临时文件写入,然后将内容从临时文件复制到实际文件。再次感谢。 – user3023401

回答

0

我真的不喜欢你共享文件流的读取器和writter,因为我已经有很多的,因为那是不合理的'问题的想法。

我已经学会了,当使用Idiposable对象时,使用'使用'语句来保证程序已完成,并且您没有收到有线错误。

试试这个,也许它有帮助,它总是这样做更好。

Using Statement

+0

谢谢。正如你所建议的那样,我分离了读写器文件流。我在作者身上使用使用声明。它现在正在工作。 – user3023401

相关问题