2010-11-03 6 views
0

J'essaie de lire un fichier texte comportant plusieurs lignes, puis de l'afficher dans une zone de texte. Le problème est que mon programme lit seulement une ligne. Quelqu'un peut-il me signaler l'erreur?Lire le fichier texte et afficher plusieurs lignes dans une zone de texte

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 

Voici un exemple textfile:

bananes et aux noix
Blueberry
cannelle
Egg
Plaine
graines de pavot
citrouille
Rye
sel
Graine de sésame

Répondre

4

Vous obtenez probablement seulement la dernière ligne dans le fichier, non? Votre code définit TextBox1.Text égal à BagelSteramReader.ReadLine() à chaque fois, en remplaçant la valeur précédente de TextBox1.Text. Essayez TextBox1.Text += BagelStreamReader.ReadLine() + '\n'

Modifier: Bien que je doive voler d'accord avec l'idée de Hans Passant à ce sujet; Si vous voulez un algorithme plus efficace, File.ReadAllLines() vous fait gagner du temps et de l'argent ... même si je ne le savais pas moi-même. Darn .NET, ayant tant de fonctionnalités ...

+2

Ce n'est pas la bonne réponse, elle devient meurtrièrement lente lorsque le fichier devient gros. Utilisez TextBox1.Text = BagelStreamReader.ReadToEnd() et omettez la boucle. File.ReadAllText() est mieux. –

+0

travaillé pour moi pas de soucis :) – Isaac

0

J'ai écrit un programme pour écrire et lire à partir d'un fichier texte. Pour écrire les lignes d'une zone de liste à un fichier texte je le code suivant:

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 

Et pour lire et écrire le contenu du fichier texte et écrire dans une zone de texte multi-ligne (vous avez juste besoin définir la propriété de plusieurs lignes d'une zone de texte à true) J'ai utilisé le code suivant. J'ai aussi dû faire du codage supplémentaire pour casser les mots individuels de la longue chaîne que j'ai reçue du fichier texte.

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 
Questions connexes