2

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 吗?

4

3 回答 3

2

当然 - 你正在寻找的是所谓的Append。例如,如果您更喜欢共享调用(不创建任何类的实例) ,您可以使用AppendAllText 。或者通过StreamWriter,通过这个构造函数。对于您的情况,您可以更换这块:

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 子句

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

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

于 2013-03-02T13:59:50.723 回答
1

到达终点的正常方法是使用搜索。

aFileStream.Seek(0,SeekOrigin.End)
于 2013-03-02T11:53:58.723 回答
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.. 事件读取/写入字节。

所有功能都可以在这里找到: 文件方法

于 2013-03-02T14:21:52.450 回答