0

テキストの内容が記載されたファイルを読んでいます。

サンプルdictionary.txtの内容:

    aa
    アバカ
    外国
    りんご

スニペット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では、「ファイルが別のプロセスで使用されています」というエラーが発生することはめったにありません。Snippet Bでは、まだ同じエラーは発生していません。

基本的には、このエラーを処理/防止できることを確認したいと思います。Snippet Bは問題を解決しますか、そうでない場合は、このエラーを防ぐことができるように他の方法があります。

ところで、これはWebアプリケーションであり、複数のユーザーを期待しています。

4

1 に答える 1

1

2 番目のサンプルは、この問題に対してより堅牢ですが、完全ではありません。ファイルが排他的に開かれている場合、または外部プロセスによってロックされている場合でも、これは失敗します。残念ながら、これは Windows システムの現実です。低レベルの API 呼び出しを使用することでこれを回避することは可能ですが、ほとんどの場合、通常は上記の方法で十分です。

于 2009-12-21T06:26:58.487 に答える