写入文件时保留现有文本

时间:2013-03-02 11:41:04

标签: vb.net

Tester.txt中,它只是说“你好”。

我现在运行:

Sub Main()
    Dim fileName As String
    Dim aFileStream As FileStream
    Dim aWriter As StreamWriter
    fileName = "...\Tester.txt"
    Try
        aFileStream = New FileStream(fileName, FileMode.OpenOrCreate)
        aWriter = New StreamWriter(aFileStream)
        aWriter.WriteLine("World")
    Catch ex As Exception
        MessageBox.Show("found this {0}", ex.Message)
    Finally
        If aWriter IsNot Nothing Then
            aWriter.Close()
        End If
        If aFileStream IsNot Nothing Then
            aFileStream.Close()
        End If
    End Try

End Sub

现在“Hello”已经覆盖了“World”。

我想保留文件中的现有文本,以便我可以先将该文本读入变量,然后编写新内容:

Sub Main()
    Dim fileName As String
    Dim aFileStream As FileStream
    Dim aWriter As StreamWriter
    Dim aReader As StreamReader
    fileName = "...\Tester.txt"
    Try
        aFileStream = New FileStream(fileName, FileMode.OpenOrCreate)

        aReader = New StreamReader(aFileStream)
        Dim myContent As String = aReader.ReadToEnd()

        aWriter = New StreamWriter(aFileStream)
        aWriter.WriteLine("World")

    Catch ex As Exception
        MessageBox.Show("found this {0}", ex.Message)
    Finally
        If aWriter IsNot Nothing Then
            aWriter.Close()
        End If
        If aReader IsNot Nothing Then
            aReader.Close()
        End If
        If aFileStream IsNot Nothing Then
            aFileStream.Close()
        End If
    End Try

End Sub

这是保留文件中已有文字的标准方法吗? 我是否可以在不使用StreamReader

的实例的情况下保留现有信息

3 个答案:

答案 0 :(得分:2)

当然 - 你要找的是Append。例如,如果您更喜欢共享调用(不创建任何类的实例),则可以使用AppendAllText。或者通过StreamWriter,通过this constructor。对于您的情况,您可以替换此部分:

Dim fileName As String
Dim aFileStream As FileStream
Dim aWriter As StreamWriter
fileName = "...\Tester.txt"
Try
    aFileStream = New FileStream(fileName, FileMode.OpenOrCreate)
    aWriter = New StreamWriter(aFileStream)
    aWriter.WriteLine("World")

有了这个(请注意,我还将代码压缩成更少的行,结果相同):

Dim aWriter As StreamWriter
Try
    aWriter = New StreamWriter("...\Tester.txt", True)
    aWriter.WriteLine("World")

World将附加到文件的末尾。如果该文件不存在,则会创建该文件,因此它已经在幕后包含FileMode.OpenOrCreate

使用AppendAllText,它变得更短:

IO.File.AppendAllText("...\Tester.txt", "World")

作为旁注,您可以避免在Finally块中调用此内容:

If aReader IsNot Nothing Then
  aReader.Close()
End If

如果您使用Using clause

Using aWriter As New StreamWriter("...\Tester.txt", True)
  aWriter.WriteLine("World")
End Using

您仍然可以保留Try/Catch子句,但最好更改它以捕获特定于文件的异常。例如,您可以使用IOException

答案 1 :(得分:1)

使用搜索的正常方法是使用搜索。

aFileStream.Seek(0,SeekOrigin.End)

答案 2 :(得分:0)

为什么需要使用流?你不能使用Io.File功能吗? 它们非常易于使用。 一些例子:

示例1:

IO.File.WriteAllText("Text.txt", "Hello") 'This overwrite file content

示例2:

IO.File.AppendAllText("Text.txt", " World") 'This append file content

示例3:

Dim FileContent As String = IO.File.ReadAllText("Test.txt")
FileContent &= vbNewLine & "Hi!"
Io.File.WriteAllText("Text2.txt", FileContent)

您可以使用等效的WriteAllBytes,ReadAllBytes来读取/写入字节。

所有功能都可以在这里找到: File Methods