我的一个应用程序旨在读取(并且仅读取)可能正在使用的文件。
但是,当读取已经在 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
,尤其是如何使用这种魔力来读取文件而不制作临时副本?