打开/读取文本文件时检测/防止错误/死锁

时间:2009-12-21 06:06:52

标签: asp.net vb.net deadlock file.readalllines

我正在阅读带有文字内容的文件。

示例dictionary.txt内容:

    aa
    abaca
    abroad
    apple

代码段A:

Dim path as String = Server.MapPath("dictionary.txt");
Dim dictionary() as String = {}
Try
{
    dictionary = File.ReadAllLines(path)
}
Catch ex as Exception

End Try

摘录B:

Dim path as String = Server.MapPath("dictionary.txt");
Dim dictionary As New List(Of String)
Using  fs As FileStream = New FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
    Using sr As StreamReader = New StreamReader(fs)
        While Not sr.EndOfStream
            dictionary.Add(sr.ReadLine().Trim())
        End While
    End Using
End Using

在Snippet A中,我很少遇到错误“文件被另一个进程使用”。 在Snippet B中,我还没有遇到同样的错误。

基本上,我想确保我可以处理/防止此错误。 片段B是否解决了问题,如果没有其他方法,我可以防止此错误。

BTW,这是一个Web应用程序,我期待着多个用户。

1 个答案:

答案 0 :(得分:1)

第二个样本对这个问题更加强大,但并不完美。如果文件以独占方式打开,或由外部进程锁定,则仍然会失败。不幸的是,这只是Windows系统上的一个事实。通过使用低级api调用可以避免这种情况,但在大多数正常情况下,上述方法通常就足够了。