(VB.NET,.NET 3.5)
我编写了以下函数来从txt文件中读取一些文本。它工作正常,但现在不是。它不断给我这个错误信息
“IOException未处理”和
“进程无法访问文件'F:\ kh_matt \ ch1.txt',因为它正由另一个进程使用。”
ch1.txt甚至没有打开或被任何程序使用。我试图将ch1.txt移动到另一个位置(驱动器D)仍然我得到相同的消息错误,但只是不同的位置它说过程无法访问文件'D:\ ch1.txt',因为它正被另一个进程使用。 “
这是我的代码块:
Private Sub btnRead_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)处理btnRead.Click
Dim reader As StreamReader
Dim filelocation As String
filelocation = "F:\kh_matt\ch1.txt"
Dim chid As Integer
chid = 1
If System.IO.File.Exists(filelocation) = True Then
reader = New StreamReader(New FileStream(filelocation, FileMode.Open))
Else
MsgBox(filelocation, MsgBoxStyle.OkOnly)
End If
Dim MyStream As New StreamReader(Path.Combine(Application.StartupPath, filelocation))
Dim vArray() As String = MyStream.ReadToEnd.Split(CChar("$"))
MyStream.Close()
Dim count As Integer
For d As Integer = 0 To vArray.Length - 1 Step 1
If d = vArray.Length - 1 Then
Exit For
End If
InsertKh(chid, d + 1, vArray(d))
count = d + 1
Next
MsgBox("Done Inserting")
End Sub
它始终指向此代码:
Dim MyStream As New StreamReader(Path.Combine(Application.StartupPath,filelocation))
我在哪里调试并按下相应的按钮。任何人都可以指出问题是什么?感谢
答案 0 :(得分:2)
我认为这是你的问题:
If System.IO.File.Exists(filelocation) = True Then
reader = New StreamReader(New FileStream(filelocation, FileMode.Open))
如果该文件存在,它将打开一个StreamReader,然后尝试在同一个文件上打开另一个StreamReader,这将锁定该文件,导致该行:
Dim MyStream As New StreamReader(Path.Combine(Application.StartupPath, filelocation))
失败。
另外,一些指示:
`
Dim vArray() As String
using (Dim MyStream As New StreamReader(Path.Combine(Application.StartupPath, filelocation))
{
vArray = MyStream.ReadToEnd.Split(CChar("$"))
}
(对不起,如果上面的代码不是100%正确,我不会写很多VB.Net)
答案 1 :(得分:1)
似乎你打开文件两次,这可能是导致你的错误的原因:
reader = New StreamReader(New FileStream(filelocation, FileMode.Open))
...
Dim MyStream As New StreamReader(Path.Combine(Application.StartupPath, filelocation))
你确定这是你打算做什么的吗?您似乎可以删除MyStream
并使用reader
代替。此外,您不必使用Path.Combine
,因为filelocation
不是相对的。
答案 2 :(得分:0)
确保关闭您的信息流&一旦你读完文件,即使抛出异常,也要使用streamreader。
使用try / finally块,并关闭finally块中的stream / streamreader。
答案 3 :(得分:0)
感谢大家的回复。这是我的错。我忘了评论我之前为测试编写的代码。在对此代码进行评论之后,它就像之前一样。
'If System.IO.File.Exists(filelocation) = True Then
' reader = New StreamReader(New FileStream(filelocation, FileMode.Open))
'Else
' MsgBox(filelocation, MsgBoxStyle.OkOnly)
'End If
祝你有个美好的一天。