2014-04-25 4 views
0

J'écris un programme où l'utilisateur recevra un score et un nom, et les deux doivent être sauvegardés en mémoire, puis être affichés dans une liste. Exemple: Peter Paul 2000Visual Basic - Ne pas écraser un fichier texte

Dans cet esprit, les données ne peuvent pas être écrasées. Exemple: Peter Paul 2000 Peter John 195 Peter Jack 2301 Peter Meilleur 7841

Et puis affiché de plus récent au plus.

Des idées?

actuel Coded utilisé dans le programme pour écrire et lire le fichier:

Private Sub OpenButton_Click(sender As Object, e As EventArgs) Handles OpenButton.Click 
    Dim CountInteger As Integer 
    Dim InStreamReader As New StreamReader("LeaderBoard.txt", False) 
    ScoreListBox.Items.Clear() 
    Do Until InStreamReader.Peek = -1 
     InStreamReader.ReadLine() 
     CountInteger += 1 
    Loop 
    InStreamReader.Close() 
    CountInteger -= 1 'need ubound not size 
    Dim InNewStreamReader As New StreamReader("LeaderBoard.txt", False) 
    Dim DataArray(CountInteger) As String 
    For i As Integer = 0 To UBound(DataArray) 
     DataArray(i) = InNewStreamReader.ReadLine() 
     ScoreListBox.Items.Add(DataArray(i)) 
    Next 
    InNewStreamReader.Close() 
End Sub 

Private Sub SaveButton_Click(sender As Object, e As EventArgs) Handles SaveButton.Click 
    Dim ResultDialogResult As DialogResult 
    Dim LineString As String 
    Dim InStreamReader As StreamReader 
    Dim OutStreamWriter As StreamWriter 

    With SaveFileDialog1 
     .InitialDirectory = Application.StartupPath 
     ResultDialogResult = .ShowDialog 
     If ResultDialogResult = Windows.Forms.DialogResult.Cancel Then 
      Exit Sub 
     End If 
     OutStreamWriter = New StreamWriter(.FileName) 
    End With 


    With OpenFileDialog1 
     .DefaultExt = "txt" 
     .Filter = "Text documents (*.txt)|*.txt" 
     ResultDialogResult = .ShowDialog 
     InStreamReader = New StreamReader(.FileName) 
     Do Until InStreamReader.Peek = -1 
      LineString = InStreamReader.ReadLine 
      OutStreamWriter.WriteLine(LineString) 
     Loop 
     InStreamReader.Close() 
     OutStreamWriter.Close() 
    End With 
End Sub 
+0

Je suppose que vous devez tamponner l'ancien contenu dans votre programme –

+0

Vous pourriez trouver ['File.ReadAllLines'] (http://msdn.microsoft.com/en-us/library/system.io.file.readalllines.aspx) plus utile que d'ouvrir le fichier * deux fois * et itérer manuellement à travers elle. –

+0

@Damien_The_Unbeliever Vous voulez donner un exemple avec mon code? – peterbest69

Répondre

0

Si vous ouvrez le fichier comme ceci:

OutStreamWriter = New StreamWriter(.FileName, true) 

Vous joindre au fichier si elle existe

Cette méthode ajouterait une chaîne inStr à un fichier fileName

Public sub saveTofile(string inStr, string fileName) 

     OutStreamWriter = New StreamWriter(fileName, true) 
     OutStreamWriter.WriteLine(inString) 
     OutStreamWriter.Close() 
    End Sub 

d'erreurs Prenez garde SINTAX, je ne peux pas essayer le code

0

Je ne suis pas sûr que cela va résoudre votre problème, mais comme la meilleure pratique vous devriez envelopper vos Streamreader s (et Streamwriter s) dans un bloc Using Statement pour assurer que l'objet est éliminé. Par exemple réécrivant le openButton:

Private Sub OpenButton_Click(sender As Object, e As EventArgs) Handles OpenButton.Click 
    Dim CountInteger As Integer 
    Using InStreamReader As New StreamReader("LeaderBoard.txt", False) 
     ScoreListBox.Items.Clear() 
     Do Until InStreamReader.Peek = -1 
      InStreamReader.ReadLine() 
      CountInteger += 1 
     Loop 
     InStreamReader.Close() 
    End Using 
    CountInteger -= 1 'need ubound not size 
    Using InNewStreamReader As New StreamReader("LeaderBoard.txt", False) 
     Dim DataArray(CountInteger) As String 
     For i As Integer = 0 To UBound(DataArray) 
      DataArray(i) = InNewStreamReader.ReadLine() 
      ScoreListBox.Items.Add(DataArray(i)) 
     Next 
     InNewStreamReader.Close() 
    End Using 
End Sub 

va de même pour la saveButton

Vous devriez le faire (si possible) pour tout objet qui implémente IDisposable

+0

il semble toujours être sur l'écriture du contenu du fichier à chaque fois. – peterbest69