8

私のアプリケーションの 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アプリケーションで既に使用されているファイルを読み取ることができる魔法とは何ですか?特に、この魔法を使用して一時コピーを作成せずにファイルを読み取る方法は?

4

2 に答える 2

4

良い質問があります。これを見てください。FileShare.ReadWrite のみを使用することが重要であることを示唆しているようです。試してみる価値があります。

http://www.geekzilla.co.uk/viewD21B312F-242A-4038-9E9B-AE6AAB53DAE0.htm

于 2010-12-06T23:10:06.987 に答える
0

FileShare.ReadWrite | FileShare.DeleteFileStream コンストラクター、または少なくとも FileShare.Delete から削除してみてください。

于 2010-12-06T23:09:15.427 に答える