web-dev-qa-db-ja.com

別のアプリケーションによってロックされているテキストファイルを読み取る最も簡単な方法

File.ReadAllText()を使用してCSVファイルを開いていますが、Excelでファイルを閉じるのを忘れるたびに、アプリケーションはファイルにアクセスできないため、例外をスローします。

(私には気が狂っているようです。つまり、ReadAllTextのREADはかなり明確に見えます)

すべてのベルとホイッスルを備えたFile.Openがあることは知っていますが、バッファーとchar配列をいじり回さない「中間」メソッドはありますか?

38
Benjol

私はあなたがただ以下が欲しいと思います:

using (var fileStream = new FileStream("foo.bar", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var textReader = new StreamReader(fileStream))
{
    var content = textReader.ReadToEnd();
}

FileAccess.Readパラメータは重要であり、ファイルのみを読み取りたいことを示します。もちろん、これを行う場合でも、ファイルはExcelによってread-shareモードで開かれている必要があります(.NETのFileShare列挙型を参照)。私はテストを行っていないので、Excelがこれを行うことを保証することはできませんが、そうなると思います。

59
Noldorin

使用中のファイルを開くためにファイル共有フラグを指定する場合は、File.Open()でスタックします。

0