使用語言:C#刪除在關閉文件
理論: 我想創建一個臨時文件夾的標誌FileOptions.DeleteOnClose的文件。 該文件已成功創建並向其寫入數據,下一步是啓動與文件Process.Start(...)關聯的應用程序並允許用戶檢查文檔,最後關閉手柄並儘快當其他進程關閉臨時文件的句柄時,該文件被操作系統刪除。
我的問題是其他進程無法打開該文件,即使閱讀,儘管如果我添加FileShare.ReadWrite | FileShare.Delete到共享模式。
有什麼建議嗎?
使用語言:C#刪除在關閉文件
理論: 我想創建一個臨時文件夾的標誌FileOptions.DeleteOnClose的文件。 該文件已成功創建並向其寫入數據,下一步是啓動與文件Process.Start(...)關聯的應用程序並允許用戶檢查文檔,最後關閉手柄並儘快當其他進程關閉臨時文件的句柄時,該文件被操作系統刪除。
我的問題是其他進程無法打開該文件,即使閱讀,儘管如果我添加FileShare.ReadWrite | FileShare.Delete到共享模式。
有什麼建議嗎?
的其他進程需要指定FileShare.Delete
,當他們打開DeleteOnClose
文件
從MSDN CreateFile文檔:
「
FILE_FLAG_DELETE_ON_CLOSE
......隨後打開該文件請求失敗,除非FILE_SHARE_DELETE
共享模式被指定「。
切換到Linux SCNR
好了,現在認真:這是在Windows操作系統無法真正圍繞工作中的缺陷。打開文件的每個程序必須同意其他程序在同一時間打開該文件。當我仍然使用Windows時,這是我多年以前遇到的一個問題。打開一個文件並說:讓其他人也打開這個文件是不夠的。其他人也必須說打開這個文件,即使它已經打開。
在Linux上,相反,操作系統不允許任何文件鎖定Windows的方式。在這裏,如果任何文件被多個程序同時使用,程序本身必須確保併發訪問被鎖定。另外,在Linux上,我們可以創建文件,確保其他進程已經啓動並打開文件,然後刪除文件(打開文件時)。文件名將立即從文件系統中刪除,但該文件仍由文件系統驅動程序維護,直到最後一個鏈接(包括打開的文件句柄)被刪除。
回到你的問題:由於這一切在Windows doen't工作,你可以做其他兩種方法:
問候,博多
我想要創建一個帶有標誌的文件 FileOptions.DeleteOnClosed在 臨時文件夾中。
我閉上我的把手,一旦其他 過程中關閉句柄 臨時文件,該文件被 操作系統中刪除。
請詳細說明。這個文件如何被操作系統刪除。如果你的意思是通過代碼刪除它。爲什麼不保存文件流。然後你可以用Process打開它。啓動
它是Windows上的一個選項 - 最近在另一個SO問題中討論過,我現在找不到它。 – 2009-02-13 14:35:14
檢查:
你需要確保所有過程正在打開與FileShare.ReadWrite和FileShare.Delete文件。
即使創建者使用share-readwrite打開,如果第二個程序試圖用share-read打開,第二個程序基本上是說沒人能寫。但是第一個程序已經擁有了這個能力,所以第二個程序就會失敗
但是,創建者可以創建該文件,然後關閉它並使用共享只讀重新打開該文件。最後,問題並不在於由兩個進程同時打開該文件,而在於如何實現該自動刪除。 – 2009-02-13 15:12:47
但是一般的Unix(不是Linux的某些特性,也可能是Linux)沒有'delete when file finally finally'選項。 – 2009-02-13 14:35:54
這是因爲即使打開它也可以刪除它。只要每個需要它的人都有處理,事情就會解決。 – 2009-02-13 14:46:26