2010-05-27 38 views
1

我不是一個程序員,但目前我想知道一個應用程序是否創建了一個臨時文件,這個Windows名稱。例如,它創建的文件是tmp001,是否有一種方法可以取名爲tmp001,並讓Windows向我提供在創建它之前創建的下一個臨時文件。如何知道要在Windows中創建的下一個臨時文件?

感謝,

邁克

+0

不,不是真的。也許你應該問一下你試圖完成的是什麼,而不是問你是如何認爲它可以完成的。 – Guffa 2010-05-27 14:55:59

+0

我是一家軟件公司(小型軟件公司)的支持工程師/軟件測試人員,我們遇到了臨時文件無法正確清理的問題。用戶所做的一個功能是創建兩個臨時文件,一個正確清理,另一個留下。基本上我試圖完成的是在臨時文件使用之後創建臨時文件,直到它開始。這樣當我們的軟件運行時,我會得到期望的結果。我的支持/測試方面的想法是將我們的臨時文件命名爲唯一,但現在不可行。 – 2010-05-29 14:41:20

回答

0

這種代碼無法在多任務操作系統上可靠地工作。另一個進程中的另一個線程可能會搶先佔領您的並聲明您希望創建的文件名。

這很容易解決,只需命名你自己的文件,而不是依靠Windows爲你做。在AppData文件夾中這樣做,這樣可以最大限度地減少另一個進程搞亂它的風險。

1

典型的應用程序使用Win32 API的GetTempFileName獲得的臨時目錄。 這裏描述瞭如何生成臨時文件的過程。

我不確定你爲什麼要這個信息,但也許你可以例如通過Win32 API(如ReadDirectoryChangesW)或使用迷你過濾器驅動程序註冊目錄更改。

1

您需要更明確地定義「臨時文件」才能用「是」回答此問題。問題是一個「臨時文件」只是不能保存的東西。它可以存在於系統中的任何地方,並由用戶,應用程序或服務創建。這會使它幾乎(或實際上)不可能用「是」來回答你的問題。

如果您將臨時文件的定義限制爲官方臨時文件夾(或子文件夾)中的文件,如果您嘗試捕獲不是由Windows生成的名稱,則仍然存在問題。任何應用程序都可以在該文件夾中生成特別命名的臨時文件,而不需要Windows護理。

如果您進一步將定義限制爲僅由Windows命名的那些文件,那麼您可能可以找到某處。但是,這是否真的符合您的需求?

畢竟,這可能會更好地描述你試圖解決的問題。可能有更好的(可行的)解決方案來解決這個問題。

3

沒有直接的方法來了解要創建的下一個臨時文件名。

例如,程序員使用System.IO.Path.GetTempFileName方法,但可以添加特定於應用程序的前綴或後綴,以便應用程序更容易找到其新創建的文件。

甚至可以選擇將此臨時文件保存在系統Temp文件夾以外的其他位置。

相關問題