0

我正在创建一个类,以帮助将一些字符串保存到本地文本文件(我想将它们附加到该文件而不是覆盖,以便它是一个日志文件)。当我使用 streamwriter 编写以查找上一个文本的结尾时,我收到一个错误“文件不可用,因为它正在被另一个进程使用”。我在 MSDN 上查看了这个问题,但得到的帮助很少。我试图消除一些变量,所以我删除了流式阅读器以检查问题是否存在。当我尝试写入该文件时,它工作并且我没有收到任何错误,所以这让我得出结论,问题出现在流读取器中。但我不知道为什么?

这是代码:

 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
4

2 回答 2

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

于 2013-04-05T13:36:04.043 回答
0

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

Psuedo

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

Writer.Open file
Loop
    Writer.Write newContent
Writer.Close
于 2013-04-04T17:19:22.543 回答