我使用Visual Basic Express 2010开发了一个小程序,它读取文件,逐行扫描,当行包含一些特定文本时,它操纵文本并将操作文本写入新文件,如果是这样的话没有达到,它写了原始的一行。
工作正常,没有错误并完成运行。但是,它会在某个时刻停止写入文件。我检查了文件,我在几个测试之间找到的唯一常见的事情是新文件的大小都是3074字节。这是VB Express的限制吗?我使用错误的方式写入文件吗?
这是代码的简化版本:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Linha As String
Dim datapag As String
'Open File
If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim novoficheiro As New System.IO.StreamWriter(OpenFileDialog1.FileName + "2.xml")
Dim Ficheiro As New System.IO.StreamReader(OpenFileDialog1.FileName)
'Scan lines one at a time
Do While Ficheiro.Peek <> -1
Linha = Ficheiro.ReadLine
Dim tratada As Boolean
tratada = False
'Make some changes in specific conditions
If Linha.Contains("<PaymentDueDate>") Then
datapag = Mid(Linha, 17, 8)
Dim composta, Novalinha3 As String
composta = Mid(datapag, 1, 4) + "-"
composta = composta + Mid(datapag, 5, 2) + "-"
composta = composta + Mid(datapag, 7, 2)
Novalinha3 = Replace(Linha, datapag, composta)
novoficheiro.WriteLine(Novalinha3)
tratada = True
End If
'If no changes were made write the original line
If tratada = False Then
novoficheiro.WriteLine(Linha)
End If
Loop
End If
End Sub
End Class
所以,我的想法是我有一个新版本的文件,只更改了一些行。 我在整个代码中添加了消息,向我展示发送到新文件的行的内容,它们都被解析好,在需要时正确校正,不需要校正时不变。 该文件在某些时候会被截断,具体取决于我处理的条件有多少,但总是会产生一个3074字节大小的文件(原始文件长度为2787字节,BTW)。
有任何帮助吗? 提前谢谢!
答案 0 :(得分:1)
我相信在完成文件写入之后和退出函数之前,您需要刷新并关闭StreamWriter。循环之后和结束之前,添加以下行:
novoficheiro.Close()
这应解决问题。