私のアプリケーションの 1 つは、使用中の可能性のあるファイルの読み取り (および読み取りのみ) を目的としています。
ただし、Microsoft Word などで既に開いているファイルを読み取る場合、このアプリケーションは次のエラーをスローしますSystem.IO.IOException
。
別のプロセスで使用されているため、プロセスはファイル '<filename here>' にアクセスできません。
ファイルの読み取りに使用されるコードは次のとおりです。
using (Stream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete))
{
// Do stuff here.
}
もちろん、ファイルは既に使用されているため、この例外は予想されます。
ここで、オペレーティング システムにファイルを新しい場所にコピーしてから読み取るように要求すると、次のように動作します。
string tempFileName = Path.GetTempFileName();
File.Copy(fileName, tempFileName, true);
// ↓ We read the newly created file.
using (Stream stream = new FileStream(tempFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete))
{
// Do stuff here.
}
File.Copy
アプリケーションで既に使用されているファイルを読み取ることができる魔法とは何ですか?特に、この魔法を使用して一時コピーを作成せずにファイルを読み取る方法は?