2

学生のスコアを新しいスコアで更新する必要がありますが、学生が現在スコアを付けている行に書き込むことができません。テキスト全体を削除するだけです。

Alex,letmein,0 David,qwerty1,0 John,password,0 Paul,lion,0 Luke,bennett,0 Ronald,Mcdonald,0 Erin,german,0 Laura,Scotland,0 Ross,extra,0 Alan,beverage,0

Try
 fileName = "C:\Documents and Settings\Student\Desktop\Task10\primary4.txt"
 Dim sWriter As New System.IO.StreamWriter(fileName) 
           index = lblPosition.Text
            sWriter.Write(username(index))
            sWriter.Write(",")
            sWriter.Write(password(index))
            sWriter.Write(",")
            sWriter.WriteLine(updatescore(position)
            sWriter.Close()
            MessageBox.Show("Writing file to disk")
            Me.Close()
     Catch ex As Exception
     MessageBox.Show(ex.Message)
End Try
4

2 に答える 2

4

テキストファイルの特定の行を更新することはできません。テキストファイルを最初から書き直すか、追加することしかできません。これはあなたがここで望んでいることではありません。

File.ReadAllLines()を使用して、テキストファイルの行を含むstring[]を取得する必要があります。更新する配列内の特定の要素を検索します。次に、File.WriteAllLines()を使用してすべてを書き戻します。

もちろんこれは高価ですが、テキストファイルは小さいです。これが、データベースエンジンが普及している主な理由です。

于 2010-09-17T14:22:19.167 に答える
1

ここに少なくとも 1 つの追加のバグがあります (例外が発生すると、ファイルが開いたままになります)。代わりに次のようにする必要があります。

fileName = "C:\Documents and Settings\Student\Desktop\Task10\primary4.txt"
Dim sWriter As IO.StreamWriter
Try 
    sWriter = New IO.StreamWriter(fileName, True) 
    index = lblPosition.Text       
    sWriter.Write(username(index))
    sWriter.Write(",")
    sWriter.Write(password(index))
    sWriter.Write(",")
    sWriter.WriteLine(updatescore(position)
    MessageBox.Show("Writing file to disk")
Catch ex As Exception
    MessageBox.Show(ex.Message)
Finally
    sWriter.Close()
End Try
Me.Close()
于 2010-09-17T14:00:48.787 に答える