0

是否可以使用 .net 中的 FileStream 对象创建文件,指定 DeleteAfterClose 选项并允许读取该文件?

我试过使用:

System.IO.FileStream strBMP = new System.IO.FileStream(sFileName, System.IO.FileMode.Create, System.Security.AccessControl.FileSystemRights., System.IO.FileShare.ReadWrite, 1024, System.IO.FileOptions.DeleteOnClose);

但尝试读取的另一个对象会违反文件共享。

我正在尝试这样做,因为我正在创建文件(tif),然后使用 COM 对象(MODI)对图像执行 OCR。我的问题是,在我调用 MODI com 对象的 close 方法后,我仍然无法使用 System.File.Delete 方法删除文件,因为 MODI com 对象还没有完全完成。我想如果我可以使用 DeleteAfterClose 选项创建我的文件,并且仍然允许读取我设置的那个文件,我只是无法弄清楚如何通过共享冲突 - 如果它甚至可能的话。

4

1 回答 1

0

当两个进程打开同一个文件时,它们都需要指定兼容的文件共享标志集,以便第二次打开成功。除非您可以控制 MODI 在打开文件时传递的标志,否则可能无法避免共享冲突;例如,如果它试图以独占模式打开文件,那么如果您的进程打开了文件,则无论您传递给 FileStream 构造函数的标志是什么,它总是会失败。

一个设计良好的 COM 对象(这里可能是也可能不是)在发布时不会让文件保持打开状态,因此问题可能与 .NET COM 互操作层有关;有可能它以一种意想不到的方式使一些 MODI COM 对象保持活动状态。事实上,其他论坛上关于这个问题的帖子都提到了托管代码。、和的某种组合可能有助于解决问题,但似乎没有人写出明确的解决方案(目前),并且使用这些函数感觉非常笨拙且非常脆弱。Marshal.FinalReleaseComObjectGC.CollectGC.WaitForPendingFinalizers

于 2010-07-05T18:50:47.790 回答