C#でファイルの読み込み処理を実装するのであれば
public void ReadTest() { var fileName = @"C:\Work\Develop\TryBlazorStrap\WebApplication1\Startup.cs"; string text = File.ReadAllText(fileName); }
public void ReadTest() { var fileName = @"C:\Work\Develop\TryBlazorStrap\WebApplication1\Startup.cs"; using (StreamReader sr = new StreamReader(fileName)) { string line; while ((line = sr.ReadLine()) != null) { Console.WriteLine(line); } } }
などかと思いますが、
System.IO.IOException : 別のプロセスで使用されているため、プロセスはファイル '{ファイル名}' にアクセスできません。
といったエラーが発生することがあります。
これは他のプロセスが読み書きロックしているケースです。
どのプロセスがロックしているのか
ProcessExplorerはタスクマネージャーよりも詳細なプロセス情報を確認することのできるツールです。
このツールで、あるプロセスがファイルを掴んでいて削除できない場合の原因のプロセスを突き止めることが可能です。
ダウンロード
Process ExplorerはSysinternal Suiteのツールの一つです。
Sysinternal Suiteは一式ダウンロードしておいて損はないと思います。
各ツールの概要はこちら
調査方法
Process Explorerを起動し、Ctrl+Fで検索ウインドウを表示します。
こうしたエラーの発生する可能性は簡単に起きうる
Excelを出力するようなアプリケーションですと、
割と簡単に起こせるケースです。
この可能性を踏まえてエラーをキャッチしてユーザーに適切に伝えてあげられると親切です。
読み書きする際には制御には気をつけよう
複数のアプリが一つのファイルを書き込みしており、片方が読み込みをするだけに読み書きロックをしているために、書き込みしていないというケースがありました。
厳密に行うのであればトランザクションのあるデータベースを使うといったアーキテクチャ変更が望ましいです。
が、現実、アーキテクチャ変更は1ヶ月で出来るようなものではありません。読み込みアプリで読み書きロックを行わず、例外をキャッチという対応を行いました。
やや手間になりますが、FileStreamを使うことになります。下記サイトで述べられています。