访问同一文件的多个进程会导致异常

时间:2015-01-20 05:37:38

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

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

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

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

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

  

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

2 个答案:

答案 0 :(得分:0)

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

因此,在这种情况下,我建议您在访问文件时应该使用锁定同步。

这是一个非常好的示例,可以帮助您“如何获取文件并将其锁定以供使用?” - Link

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

<强>更新

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

  
    

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

  

答案 1 :(得分:0)

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

这里有两个选项,要么找到一种在Excel和应用程序之间同步文件写入的方法。或者您可以在c#应用程序中使用卷影复制编写器(不确定这是否可以在Excel中实现,但只要一个应用程序使用它就足够了,只要它总是使用VSS写入文件)

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