![](/img/trans.png)
[英]Can't remove a file which created by `tempfile.mkstemp()` on Windows
[英]Deleting a locked file created with TempFile
我有一個GUI(lxn / walk)應用程序修補程序,可通過ftp下載文件,將其流式傳輸到臨時文件,然后提取內容以更新本地文件。 刪除文件命令被推遲。
除非用戶在下載文件時退出程序,否則文件不會被刪除,這將起作用。
我試圖通過捕獲信號並在那里刪除文件來正常退出來解決此問題。 但不幸的是,它引發了一個錯誤,因為該文件正在被另一個程序使用,因此無法刪除該文件。 這是有道理的,因為另一個程序本身實際上仍在寫入臨時文件。
現在我被卡住了,不知道該怎么辦,以確保在修補程序不運行后臨時文件自動消失。 我該怎么做呢?
該文件也可以創建為普通文件,而不僅僅是臨時文件。 我也想問一下,在Windows哪里最好寫一個臨時文件?
現在我被卡住了,不知道該怎么辦,以確保在修補程序不運行后臨時文件自動消失。 我該怎么做呢?
沒有保證的方法可以完成此操作,因為超出應用程序控制范圍的許多事情都可能導致它退出。 由於某些硬件問題而導致的電源故障或內核崩潰可能會使計算機崩潰或迫使其重新啟動。
常用的策略是在程序啟動時檢查前一次運行的狀態。 一些應用程序在啟動時創建一個鎖定文件,並在正常退出時將其刪除。 如果重新啟動程序時此鎖定文件存在,則意味着先前的運行未導致干凈退出,並且應用程序可以采取任何糾正措施。 采取的確切操作取決於應用程序的性質,有些拒絕啟動,有些則向用戶發出警告。
我也想問一下,在Windows哪里最好寫一個臨時文件?
每個操作系統都有其自己的臨時文件位置。 如果消除了TempFile
的dir
參數,它將在適當的位置創建它,如文檔中所述:
TempFile
在目錄dir中創建一個新的臨時文件,打開該文件進行讀取和寫入,並返回結果*os.File
。 通過采用模式並在末尾添加隨機字符串來生成文件名。 如果pattern包含"*"
,則隨機字符串將替換最后一個"*"
。 如果dir是空字符串,則TempFile
使用默認目錄存儲臨時文件(請參見os.TempDir
)。 同時調用TempFile
多個程序將不會選擇同一文件。 調用者可以使用f.Name()
查找文件的路徑名。 不再需要該文件時,調用方有責任刪除它。
從os.TempDir
我們看到以下內容:
在Unix系統上,如果非空,則返回
$TMPDIR
,否則返回/tmp
。 在Windows上,它使用GetTempPath
,從%TMP%
,%TEMP%
,%USERPROFILE%
或Windows目錄返回第一個非空值。 在計划9中,它返回/tmp
。該目錄既不能保證存在也不具有訪問權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.