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 に答える