【问题标题】:Multiple Processes accessing the same file causes exception多个进程访问同一个文件导致异常
【发布时间】:2015-01-20 21:11:38
【问题描述】:

我写了一个 Excel 宏,它每 3 秒将 Excel 数据写入一个文本文件。

同时,我有一个用 C# 语言编写的程序,它访问同一个文本文件,由 excel 宏生成,并执行一些处理,然后每 5 秒输出到一个 xml 文件。

我遇到的问题是,当另一个进程正在访问同一个 txt 文件时,它有时会导致 IoException。问题并不经常发生。现在我在 C# 程序中使用 try...catch 语句和在 excel 宏中使用 On Error 语句来捕获异常以避免停止我的程序。

还有其他方法可以解决这个问题吗?

例外: System.IO.IOException: 文件被另一个进程使用

【问题讨论】:

  • 同时访问文件时遇到了哪个错误?
  • System.IO.IOException: 文件被 C# 程序中的另一个进程使用

标签: c# vba file-io exception-handling


【解决方案1】:

我认为另一个线程已经获取了您现在尝试写入的资源(文件),这会导致 IOException。

所以在这种情况下,我建议您在访问文件时使用锁同步。

这是一个很好的例子,可以帮助您“如何获得文件释放并锁定它以供使用?” - Link

在尝试写入文件时使用此机制锁定文件并等待文件被释放。

更新

关于引用链接的更多信息。

它只是迭代while循环,直到它打开文件以写入,然后调用回调(Action)传递文件实例。

【讨论】:

    【解决方案2】:

    您的问题是您的 Excel 宏和 C# 程序可能同时写入同一个文件。

    您有两种选择,一种是找到一种在 Excel 和您的应用程序之间同步文件写入的方法。或者您可以在您的 c# 应用程序中使用 Shadow Copy 编写器(不确定这是否可以在 excel 中实现,但使用它的一个应用程序应该足够了,只要它始终使用 VSS 写入文件)

    您可以检查 AlphaVSS 作为您应用程序的 VSS 处理程序

    【讨论】:

      猜你喜欢
      • 2021-07-17
      • 1970-01-01
      • 2022-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      相关资源
      最近更新 更多