【发布时间】:2010-12-06 23:04:24
【问题描述】:
我的一个应用程序旨在读取(并且仅读取)可能正在使用的文件。
但是,当读取已经在 Microsoft Word 中打开的文件时,此应用程序会抛出 System.IO.IOException:
该进程无法访问文件“
”,因为它正被另一个进程使用。
用来读取文件的代码是:
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 的魔力是什么,它允许读取应用程序已经使用的文件,尤其是如何使用这种魔力来读取文件而不制作临时副本?
【问题讨论】:
-
您的代码对我来说很好用。您是否有可能在您的应用程序中指定 FileAccess.Write,即使它不在您上面的 sn-p 中?
-
正如 Ciaran Keating 上面所说,您的原始代码对我有用。你在“// Do stuff here”中做什么。
标签: c# ioexception file-access