在Visual Basic中写入文本文件停止在3074字节。知道为什么吗?

时间:2014-02-07 17:54:39

标签: vb.net vb.net-2010

我使用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)。

有任何帮助吗? 提前谢谢!

1 个答案:

答案 0 :(得分:1)

我相信在完成文件写入之后和退出函数之前,您需要刷新并关闭StreamWriter。循环之后和结束之前,添加以下行:

novoficheiro.Close()

这应解决问题。