我正在创建一个类来帮助将一些字符串保存到本地文本文件(我想将它们附加到该文件而不是覆盖它以便它是一个日志文件)。当我使用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
答案 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)
您正在尝试read
和write
到同一个文件,这会导致lock
争用。将文件的内容存储到变量中,然后将其写回,包括新数据到文件中。
Psuedo
Reader.Open file
String content = Reader.ReadToEnd()
Reader.Close
Writer.Open file
Loop
Writer.Write newContent
Writer.Close