流阅读器和作者冲突

时间:2013-04-04 17:14:21

标签: vb.net stream streamreader streamwriter

我正在创建一个类来帮助将一些字符串保存到本地文本文件(我想将它们附加到该文件而不是覆盖它以便它是一个日志文件)。当我使用streamwriter写入以查找上一个文本的结尾时,我收到一个错误“该文件不可用,因为它正被另一个进程使用”。我在MSDN上调查了这个问题并得到了很少的帮助。我试图消除一些变量,所以我删除了streamreader以检查问题是什么。当我尝试写入文件然后它工作,我没有错误,所以这使我得出结论,问题出现在streamreader中。但我无法弄清楚为什么?

以下是代码:

 Public Sub SaveFile(ByVal Task As String, ByVal Difficulty As Integer, ByVal Time_Taken As String)
    Dim SW As String = "C:/Program Files/Business Elements/Dashboard System Files/UserWorkEthic.txt"
    Dim i As Integer
    Dim aryText(3) As String
    aryText(0) = Task
    aryText(1) = Difficulty
    aryText(2) = Time_Taken
    Dim objWriter As System.IO.StreamWriter = New System.IO.StreamWriter(SW, True)
    Dim reader As System.IO.StreamReader = New System.IO.StreamReader(SW, True)
    reader.ReadToEnd()
    reader.EndOfStream.ToString()
    For i = 0 To 3
        objWriter.WriteLine(aryText(reader.EndOfStream + i))
    Next
    reader.Close()

    objWriter.Close()

End Sub

2 个答案:

答案 0 :(得分:1)

正如Joel对上一个答案所评论的那样,可以改变锁定的类型。

否则建立在Neil建议的基础上,如果尝试使用新读者写入文件,则很难不丢失文件中已有的信息。

我建议您将原始文件重命名为临时名称,例如"UserWorkEthicTEMP.txt"。使用原始名称创建新文本文件。现在;在将新数据添加到结尾之前,读取一行,在两个文件之间写一行。最后删除临时文件,您将获得包含新详细信息的新文件。如果您有错误,临时文件将用作原始文件的备份。下面是一些示例代码:

Change file names

Dim Line as string
line=Reader.readline
Do until Line=nothing    
objwriter.writeline(line)
line=reader.readline
loop

add new values on the end and remove old file

答案 1 :(得分:0)

您正在尝试readwrite到同一个文件,这会导致lock争用。将文件的内容存储到变量中,然后将其写回,包括新数据到文件中。

Psuedo

Reader.Open file
String content = Reader.ReadToEnd()
Reader.Close

Writer.Open file
Loop
    Writer.Write newContent
Writer.Close