2010-08-09 80 views
9

我正在編寫一個需要通用臨時文件夾的程序。我試圖找到有關Windows Temp文件夾的詳細信息。有兩條路,我知道 -Windows臨時目錄詳細信息(Java)

  1. 在每個用戶目錄下的應用程序數據\本地的\ Temp \ 這可能會改變取決於Windows版本?

  2. 在根據TEMP \系統文件夾(C:\ WINDOWS \ TEMP)

我想知道到底是什麼Windows不會給每個這些。如果Windows從任一位置刪除文件,它何時會這樣做?我該如何/應該使用這些目錄進行編程?

編輯:我實際上有一個更大的問題 - 由於某些引擎我間接運行我的程序,它使用我在臨時目錄中創建的文件,我需要一個不使用空格的臨時目錄字符在路徑中。 Windows上的Java的System.getProperty(「java.io.tmpdir」)爲我提供了用戶目錄中的臨時文件,它在XP上位於「文檔和設置...」中。 不好。有什麼建議麼?這就是爲什麼我想知道C:\ Windows \ Temp \目錄...

回答

3

不完全。有一個用戶和系統文件夾,其默認位置根據Windows版本和系統文件夾名稱而有所不同,實際上,在舊版本的Windows中,用戶和系統文件夾都是相同的。但是,這些默認值可能會被覆蓋(它們在我現在使用的系統上,它們與系統文件夾不在同一個驅動器上)。

位置存儲在系統變量中。一些框架(.NET,VB6,毫無疑問是其他框架)爲您提供了便捷的方式來查找路徑,而不必查找系統變量(例如.NET中的System.IO.Path.GetTempPath)。

Windows不會爲您清理臨時文件夾(這就是爲什麼它每隔幾個月就會在自己的機器上爆破舊文件的原因),這取決於您玩的好。創建一個或多個文件不太可能使用任何其他軟件正在使用的名稱(他們應該小心地執行相同的操作,因此任何名稱都應該這樣做,但假設系統中的其他代碼更糟)總是好的,並且完成後刪除文件(或至少在應用程序退出時)。

在.NET中System.IO.Path.GetTempFileName()將在臨時區域中創建一個新文件,並將其返回給您的名稱,這是合理保證不與他人衝突,所以使用該方法或類似的方法如果你可以的話。

+0

我很確定Windows在重新引導時清空C:\ Windows \ Temp \文件夾...或至少看起來這樣。任何人都可以確認嗎? – 2010-08-09 03:36:33

+0

@Tony R - 它取決於配置。我工作過的大多數網站在重新啓動時不清除tmp(但有些網站)。 – 2010-08-09 07:42:48

+0

System.IO.Path.GetTempFileName()是Java中的File.createTempFile(...)。 – 2010-08-09 07:56:30

0

要回答你的問題的一部分 - 如果你使用.NET,你可以使用System.IO命名空間的Path.GetTempPath()方法來獲取臨時目錄的位置。

// Get the path of the temporary directory 
string tempDir = Path.GetTempPath(); 

// "Creates a uniquely named, zero-byte temporary file on disk and returns the full path of that file." 
string tempFile = Path.GetTempFileName(); 
+0

由於= d。我正在使用Java,所以我可以通過System.getPropterty獲得用戶目錄中的臨時路徑(...) – 2010-08-09 03:34:50

0

在我的PC(XP SP3)上定義的%TEMP%環境變量使用DOS風格的abcdef~1目錄名稱 - 因此,如果您可以取出該變量,則最終應該有一個無空格的路徑。

例如Start>Run>%TEMP%帶我到C:\DOCUME~1\<user>\LOCALS~1\Temp

但是,如果一個'超級用戶'擺弄這個變量並指向它的其他地方,事情可能會崩潰。您可以查看like this以檢索8個字符和無空格的路徑。

1

這聽起來像你有兩個程序需要共享臨時文件,而且一個絕對不需要路徑名中的空格。大概最容易做的事情是:

  1. 設置TMP和TEMP變量公共目錄
  2. 推出各自的應用程序(從這個修改後的環境) - 這應該拿起臨時變量

因此,在命令提示符下,你可以這樣做:

  1. 設置TMP = C:\ MYTEMP
  2. SET TEMP = C:\ MYTEMP
  3. 的java -cp X; Y; ​​Z my.application.Entry
  4. 運行其它應用(希望它也讀出用於臨時/ TMP環境)

希望有所幫助。

+0

你會改變一個系統的工作方式,只是爲了讓一個應用程序工作?如果有人「修復」臨時文件夾位置會發生什麼情況。 如果這些應用程序對臨時文件夾有超出正常臨時文件夾的特定需求,我會創建自己的臨時文件夾並使用該文件夾而不是普通文件夾,或者使用路徑的「MS-DOS兼容」版本,所以不會有空格。 – 2010-08-09 12:42:13

+0

無需在系統級別更改任何內容。該建議可以在批處理腳本或cmd shell中正常工作,並且只具有本地化的影響。 – 2010-08-09 13:43:16

8

這會給你在Java中的Windows臨時目錄的路徑。

File.createTempFile("temp-file", "tmp").getParent() 
0

使用這個代碼

try { String s=File.createTempFile("temp-file", "tmp").getParent(); 
      System.out.println(s); 

     } catch (IOException ex) { 
      Logger. getLogger(Result.class.getName()).log(Level.SEVERE, null, ex); 
      }