9

一般的な一時フォルダーを必要とするプログラムを作成しています。Windows の一時フォルダーに関する詳細を見つけようとしています。私が知っている2つの道があります -

  1. AppData\Local\Temp\ の下の各ユーザー ディレクトリ内 これは、Windows のバージョンによって異なる場合があります。

  2. Temp\ (C:\Windows\Temp) の下のシステム フォルダー内

Windowsがこれらのそれぞれに対して何をするのか正確に知りたいです。Windows がいずれかの場所からファイルを削除する場合、いつ削除しますか? これらのディレクトリをプログラミングに使用するにはどうすればよいですか?

編集:実際にはもっと大きな問題があります-一時ディレクトリに作成しているファイルを使用するプログラムで間接的に実行している特定のエンジンのため、パスに空白文字を使用しない一時ディレクトリが必要です. Windows で Java の System.getProperty("java.io.tmpdir") を実行すると、XP では "Documents and Settings..." の下にあるユーザー ディレクトリにある一時ファイルが表示されます。助言がありますか?これが、 C:\Windows\Temp\ ディレクトリについて疑問に思っている理由です...

4

7 に答える 7

10

これにより、Javaのwindowstempディレクトリへのパスがわかります。

File.createTempFile("temp-file", "tmp").getParent()
于 2012-05-28T03:08:19.543 に答える
3

そうではありません。ユーザー フォルダーとシステム フォルダーがあり、その既定の場所は Windows のバージョン、システム フォルダー名によって異なります。実際、古いバージョンの Windows では、ユーザーとシステムの両方のケースで同じでした。ただし、これらのデフォルトは上書きできます (現在使用しているシステム上にあり、システム フォルダーと同じドライブ上にはありません)。

場所はシステム変数に保存されます。一部のフレームワーク (.NET、VB6 など) では、システム変数 (.NET の System.IO.Path.GetTempPath など) を検索するよりも、パスを見つける便利な方法が提供されます。

Windows は一時フォルダをクリーンアップしません (そのため、自分のマシンで数か月ごとに古いファイルを一掃する価値があります)。他のソフトウェアが使用している名前を踏む可能性が低いファイルを作成します (同じことを行うように注意する必要があるため、どのような名前でも構いませんが、システム上の他のコードの悪い方を想定することは常に良いことです)。完了したら(または少なくともアプリケーションの終了時に)ファイルを削除します。

.NET System.IO.Path.GetTempFileName() は一時領域に新しいファイルを作成し、その名前を返します。これは、他のファイルと競合しないことが合理的に保証されているため、可能であればその方法または同様の方法を使用してください。

于 2010-08-09T03:23:53.643 に答える
1

一時ファイルを共有する必要がある2つのプログラムがあり、1つはパス名にスペースを絶対に入れたくないようです。おそらく最も簡単な方法は次のとおりです。

  1. TMP および TEMP 変数を共通ディレクトリに設定する
  2. (この変更された環境から)各アプリケーションを起動します-一時変数を取得する必要があります

したがって、コマンドプロンプトでこれを行うことができます:

  1. TMP=c:\mytemp を設定します
  2. TEMP=c:\mytemp を設定します
  3. java -cp x;y;z my.application.Entry
  4. 他のアプリケーションを実行します(うまくいけば、temp/tmp の環境も読み取られます)

それが役立つことを願っています。

于 2010-08-09T07:50:44.467 に答える
0

私の%TEMP%PC (XP SP3) で定義されている環境変数は、DOS スタイルのabcdef~1ディレクトリ名を使用しています。したがって、その変数をプルできる場合は、スペースのないパスになるはずです。

例:Start>Run>%TEMP%私を連れて行きますC:\DOCUME~1\<user>\LOCALS~1\Temp

ただし、「スーパーユーザー」がその変数をいじって別の場所を指すと、問題が発生する可能性があります。このようなものを見ると、8 文字でスペースのないパスを取得できます。

于 2010-08-09T04:21:02.953 に答える
0

質問の一部に答えるには、.NET を使用しているPath.GetTempPath()場合は、名前空間のメソッドを使用しSystem.IOて一時ディレクトリの場所を取得できます。

// 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();
于 2010-08-09T03:15:59.043 に答える
0

この方法で試すことができます

System.out.println(File.createTempFile("temp-file", "tmp").getParent());
String property = "java.io.tmpdir";
String tempDir = System.getProperty(property);
System.out.println("OS current temporary directory is " + tempDir);
于 2018-08-06T04:40:07.083 に答える