在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
?
答案 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