【问题标题】:Cannot write to file while it is opened in MS Excel在 MS Excel 中打开文件时无法写入文件
【发布时间】:2012-01-08 05:22:25
【问题描述】:

我正在向文本文件写入一些数据。我正在使用此代码:

  using (FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
  {
      using (TextWriter tw = new StreamWriter(fs))
      {
      tw.WriteLine("sample_data");
      }
   }

当文件被记事本打开时,我的应用程序可以写入其中。当 MS Excel 打开此文件时,我收到以下错误:进程无法访问文件 myfile.csv,因为它正被另一个进程使用。什么会导致这种情况,我该如何解决这个问题?

【问题讨论】:

  • 我猜Excel可以在使用文件时赋予“独占”写入文件的权限。我不确定您是否可以绕过它。你可以有一些信息here

标签: c# .net io filestream


【解决方案1】:

记事本打开文件,读入全部内容,然后关闭文件。您甚至可以删除在记事本中打开的文件。

另一方面,只要文件显示,Excel 就会保持文件打开。有一些特殊的共享工具可以在 Excel 中为 excel 格式文件启用。在这种情况下,我假设它是非排他性打开的。否则 Excel 会以独占方式打开文件并保持打开状态。

如果文件已被其他人以独占模式打开,则在打开时指定共享选项并不重要。

【讨论】:

    【解决方案2】:

    Excel 会在文件打开时锁定文件,从而阻止与文件的交互。我解决此问题的一种方法是编写代码以扫描本地计算机上的 excel 进程,并在访问使用 excel 打开的文件之前终止这些进程。您可以通过查看How to check for file lock? 然后在异常处理程序中运行进程终止代码来确定文件是否被锁定。

    【讨论】:

      【解决方案3】:

      使用 OleDB 打开 csv 文件并使用 INSERT 和/或 UPDATE 语句。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多