2010-07-05 76 views
0

是否可以使用.net中的FileStream對象創建文件,指定DeleteAfterClose選項並允許對該文件的讀取訪問權限?使用DeleteAfterOpen創建文件,並允許其他進程讀取文件

我已經嘗試使用:

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選項創建我的文件,並且仍然允許閱讀那個文件,那麼我就無法弄清楚如何通過共享衝突 - 如果這是可能的話。

回答

0

當兩個進程打開同一個文件時,他們都需要指定兼容的文件共享標誌集以便第二次打開才能成功。除非您可以控制MODI在打開文件時傳遞的標誌,否則可能無法避免共享衝突;例如,如果它試圖以獨佔模式打開文件,則無論您傳遞給FileStream構造函數的標誌是什麼,如果您的進程打開文件,它將始終失敗。

設計良好的COM對象(在這裏可能會也可能不會)在發佈時不會保持文件打開,所以問題可能與.NET COM互操作層有關;它可能會以一種無法預料的方式保留一些MODI COM對象。確實,threads在其他論壇上關於this problem都提到託管代碼。有可能Marshal.FinalReleaseComObject,GC.Collect,GC.WaitForPendingFinalizers的某種組合可能有助於解決問題,但似乎沒有人寫出明確的解決方案(但是),並且使用這些功能感覺非常難以理解且非常脆弱。

相關問題