2010-11-03 139 views
0

我试图读取多行文本文件,然后将其显示在文本框中。问题是我的程序只能读一行。有人可以指出我的错误吗?读取文本文件并将多行输出到文本框

Imports System.IO 
Imports Microsoft.VisualBasic.FileIO 

Public Class Form1 

    Private BagelStreamReader As StreamReader 
    Private PhoneStreamWriter As StreamWriter 
    Dim ResponseDialogResult As DialogResult 

    Private Sub OpenToolStripMenuItem_Click(ByVal sender As System.Object, _ 
      ByVal e As System.EventArgs) Handles OpenToolStripMenuItem.Click 

     'Dim PhoneStreamWriter As New StreamWriter(OpenFileDialog1.FileName) 

     'Is file already open 
     If PhoneStreamWriter IsNot Nothing Then 
      PhoneStreamWriter.Close() 
     End If 

     With OpenFileDialog1 
      .InitialDirectory = Directory.GetCurrentDirectory 
      .FileName = OpenFileDialog1.FileName 
      .Title = "Select File" 
      ResponseDialogResult = .ShowDialog() 
     End With 

     'If ResponseDialogResult <> DialogResult.Cancel Then 
     ' PhoneStreamWriter = New StreamWriter(OpenFileDialog1.FileName) 
     'End If 

     Try 
      BagelStreamReader = New StreamReader(OpenFileDialog1.FileName) 
      DisplayRecord() 
     Catch ex As Exception 
      MessageBox.Show("File not found or is invalid.", "Data Error") 
     End Try 
    End Sub 

    Private Sub DisplayRecord() 

     Do Until BagelStreamReader.Peek = -1 
      TextBox1.Text = BagelStreamReader.ReadLine() 
     Loop 

     'MessageBox.Show("No more records to display.", "End of File") 
     'End If 
    End Sub 

    Private Sub SaveToolStripMenuItem_Click(ByVal sender As System.Object, _ 
      ByVal e As System.EventArgs) Handles SaveToolStripMenuItem.Click 

     With SaveFileDialog1 
      .InitialDirectory = Directory.GetCurrentDirectory 
      .FileName = OpenFileDialog1.FileName 
      .Title = "Select File" 
      ResponseDialogResult = .ShowDialog() 
     End With 

     PhoneStreamWriter.WriteLine(TextBox1.Text) 
     With TextBox1 
      .Clear() 
      .Focus() 
     End With 
     TextBox1.Clear() 
    End Sub 

    Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, _ 
      ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click 

     Dim PhoneStreamWriter As New StreamWriter(OpenFileDialog1.FileName) 
     PhoneStreamWriter.Close() 
     Me.Close() 

    End Sub 
End Class 

下面是一个示例文本文件:

香蕉螺母
蓝莓
肉桂

平原
罂粟籽
南瓜
黑麦

芝麻籽

回答

4

你可能只是得到文件的最后一行,对吧?您的代码每次都将TextBox1.Text设置为等于BagelSteramReader.ReadLine(),覆盖TextBox1.Text的前一个值。尝试TextBox1.Text += BagelStreamReader.ReadLine() + '\n'

编辑:虽然我必须 同意Hans Passant对此的评论想法;如果你想要一个更高效的算法,File.ReadAllLines()甚至可以节省你的时间和金钱......尽管我自己并不知道它。 Darn .NET,有这么多的功能...

+2

这不是正确的答案,当文件变大时它变得非常慢。使用TextBox1.Text = BagelStreamReader.ReadToEnd()并省略循环。 File.ReadAllText()更好。 – 2010-11-03 19:26:10

+0

为我工作无后顾之忧:) – Isaac 2010-11-05 04:08:47

0

我写了一个程序来写入和从文本文件读取。要在列表框的线条写我用下面的代码的文本文件:

Private Sub txtWriteToTextfile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtWriteToTextfile.Click 

    Dim FileWriter As StreamWriter 

     FileWriter = New StreamWriter(FileName, False) 

     ' 3. Write some sample data to the file. 
     For i = 1 To lstNamesList.Items.Count 
      FileWriter.Write(lstNamesList.Items(i - 1).ToString) 
      FileWriter.Write(Chr(32)) 
     Next i 

     FileWriter.Close() 

End Sub 

并读取和写入文本文件的内容,并写入多行文本框(你只需要设置文本框的多行属性为true)我使用了下面的代码。我还必须做一些额外的编码来打破我从文本文件中收到的长字符串中的单词。

Private Sub cmdReadFromTextfile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdReadFromTextfile.Click 
    Dim sStringFromFile As String = "" 
    Dim sTextString As String = "" 
    Dim iWordStartingPossition As Integer = 0 
    Dim iWordEndingPossition As Integer = 0 
    Dim iClearedTestLength As Integer = 0 

    Dim FileReader As StreamReader 


     FileReader = New StreamReader(FileName) 

     sStringFromFile = FileReader.ReadToEnd() 

     sTextString = sStringFromFile 

     txtTextFromFile.Text = "" 

     Do Until iClearedTestLength = Len(sTextString) 

      iWordEndingPossition = CInt(InStr((Microsoft.VisualBasic.Right(sTextString, Len(sTextString) - iWordStartingPossition)), " ")) 

      txtTextFromFile.Text = txtTextFromFile.Text & (Microsoft.VisualBasic.Mid(sTextString, iWordStartingPossition + 1, iWordEndingPossition)) & vbCrLf 

      iWordStartingPossition = iWordStartingPossition + iWordEndingPossition 

      iClearedTestLength = iClearedTestLength + iWordEndingPossition 

     Loop 

     FileReader.Close() 


End Sub 
相关问题