обнаружение / предотвращение ошибки / тупик при открытии / чтении текстового файла - PullRequest
0 голосов
/ 21 декабря 2009

Я читаю файл с текстовым содержимым.

образец словаря.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

В фрагменте A я редко сталкиваюсь с ошибкой «Файл используется другим процессом». В фрагменте B я еще не сталкивался с той же ошибкой.

По сути, я хочу убедиться, что смогу обработать / предотвратить эту ошибку. Сниппет B, решает проблему, если нет другого способа, чтобы я мог предотвратить эту ошибку.

Кстати, это веб-приложение, и я ожидаю нескольких пользователей.

1 Ответ

1 голос
/ 21 декабря 2009

Второй образец более устойчив к этой проблеме, но не идеален. Если файл открыт исключительно или заблокирован внешним процессом, это все равно не удастся. К сожалению, это просто факт жизни в системах Windows. Этого можно избежать, используя низкоуровневые вызовы API, но в большинстве случаев вышеописанного метода обычно достаточно.

...