我可以简单地“读取”正在使用的文件吗?

我试图使用StreamReader读取文件,但它总是被另一个进程使用,所以我得到这个错误:

该进程无法访问文件’\ arfjwknasgmed17 \ C $ \ FLAG CONDITION \ CP-ARFJN-FLAG.XLS’,因为它正由另一个进程使用。

有没有办法可以在不复制的情况下阅读本文? 或者这是我唯一的选择?

仅当首先打开文件的程序指定了对该文件的读取共享权限时,才能读取该文件。

如果文件确实没有读取共享权限,则您将无法在第一时间复制它。

如果您指定的共享权限与已打开文件的程序的共享权限冲突,则可能无法访问文件。 例如,如果已打开程序的程序未授予写访问权限,则无法授予写访问权限。

如果首先打开文件的程序支持卷影复制(VSS),则还可以使用VSS来访问该文件。

有商业软件驱动程序允许您访问这些文件,即使它们正在使用。 您以前可以通过St-Bernards获得Open File Manager,也可以使用VisionWorks Solutions Inc.的文件访问管理器(FAM) 。这些驱动程序通常是OEM备份软件公司以包含在他们的产品中。

VSS的工作原理是告诉已经打开文件的程序,另一个程序想要从文件中读取。 然后,VSS会复制该文件,并允许您从该副本中读取。 VSS不适用于遗留应用程序。

通过指定可以访问独占打开和锁定文件的应用程序的“允许列表”,FAM透明地适用于传统和非传统程序。 只允许此列表中的程序访问这些文件。 打开文件时,它会进入缓存模式,这样您就可以获得文件的副本,就像文件的“备份/打开”开始时一样。 此时,最初打开文件的程序看到文件实际上是,并且允许列表中的第二个程序看到文件发生时“打开/备份”文件。 这可确保文件的一致性。

试试下面的代码。

FileStream fileStr = File.Open(, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); fileStream = new StreamReader(fileStr); 

我在Windows XP上试过它。 如果某个其他进程已在写入模式下打开该文件且未指定共享权限,您仍可以在读取模式下打开该文件。

免责声明:它有效,但是,我不确定您是否应该在生产代码中使用它。 我还没有找到任何正式文档说它应该工作。