一時ファイルについて win32 GetTempFileName

このQ&Aのポイント
  • 一時ファイルは基本的にプログラム終了時には削除するものだが、万が一、不正な処理によって削除できなかった場合に不要なファイルが残ってもいいようにあるということを学んだのですが、そこでいくつか質問があります。
  • 残ってしまった一時ファイルはいつ削除されるのでしょうか?
  • GetTempFileNameを使って作成した一時ファイルは、Windows のシャットダウン時に自動的に削除されることはありません。とMSDNに書いてあったのですが、シャットダウン時に自動的に削除される一時ファイルも作ることができるのでしょうか?
回答を見る
  • ベストアンサー

一時ファイルについて win32 GetTempFileName

windowsの一時ファイルについて質問です。 一時ファイルは基本的にプログラム終了時には削除するものだが、万が一、不正な処理によって削除できなかった場合に不要なファイルが残ってもいいようにあるということを学んだのですが、そこでいくつか質問があります。 1.残ってしまった一時ファイルはいつ削除されるのでしょうか? 2.GetTempFileNameを使って作成した一時ファイルは、Windows のシャットダウン時に自動的に削除されることはありません。とMSDNに書いてあったのですが、シャットダウン時に自動的に削除される一時ファイルも作ることができるのでしょうか? 3.GetTempFileNameを使う理由がわかりません。なぜ、わざわざファイル名を生成してしかも拡張子が .tmp なのでしょうか?普通に一時フォルダーにファイルを作ってはダメなのでしょうか?例えば 任意の名前.txt これだと自動で削除されなくなるとか?? 例えば、そんな重要じゃないけど残ってたらうれしいな程度のファイル(ソフトウェアの前回の状態を記憶したファイルなど)を一時フォルダーに作って保存して置くってのはありなのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

>残ってしまった一時ファイルはいつ削除されるのでしょうか? 作成した場所にもよりますが…自主的に削除するまで…でしょうか。 環境変数TMPやTEMPで設定されている箇所に作成した場合は、「ディスク・クリーンアップ」で削除されるかと思われます。 >GetTempFileNameを使って作成した一時ファイルは、Windows のシャットダウン時に自動的に削除されることはありません。とMSDNに書いてあったのですが、シャットダウン時に自動的に削除される一時ファイルも作ることができるのでしょうか? シャットダウン時…ではありませんが、CreateFile()の第6引数のファイル属性でFILE_FLAG_DELETE_ON_CLOSEを付けると、使用後に削除してくれる…らしいです。 試したことはありませんが。 MoveFileEx()で第3引数にMOVEFILE_DELAY_UNTIL_REBOOTを付与することで、再起動時に移動(第2引数をNULLにすることで削除)できます。 # デバイスドライバ等やMicrosoft Updateでの更新の適用に再起動を必要とするのはこのため。 # ちなみに、こちらもシャットダウン時ではなくOSの起動処理の途中で処理されます。 >GetTempFileNameを使う理由がわかりません。なぜ、わざわざファイル名を生成してしかも拡張子が .tmp なのでしょうか? 慣例的に一時ファイルの拡張子に.tmpを使用しているから…でしょう。 >普通に一時フォルダーにファイルを作ってはダメなのでしょうか? 別に問題ありませんよ。 >例えば 任意の名前.txt これだと自動で削除されなくなるとか?? 元々、GetTempFileName()を使用しても自動で削除されたりはしません。 あくまでも「一時ファイルのファイル名を(フルパスで)取得する」だけです。 # ある程度ファイル名の形式が指定できたり、「確実に使用中ではないファイル名」を生成できたりするだけです。 # 使用中でない~を確実にするために空ファイルの作成をすることはありますが。(第3引数に0を指定した場合) >そんな重要じゃないけど残ってたらうれしいな程度のファイル(ソフトウェアの前回の状態を記憶したファイルなど)を一時フォルダーに作って保存して置くってのはありなのでしょうか? ありと言えばありですが…いつ削除されるかわかりませんよ。 ということで、「ソフトウェアの前回の状態を記憶したファイルなど」はソフトウェアのインストールされたディレクトリや、それ用のディレクトリに保存します。 # XPなら「Documents and Settings」の下の各アカウントディレクトリの下にある「Application Data」や「Local Settings」の下にディレクトリを作成して入れたり、「My Documents」の下に入れたり… # これらのディレクトリ名もAPIで取得できます。

yozakura20
質問者

お礼

丁寧にありがとうございます。 とても勉強になりました!

関連するQ&A

  • Winフォルダ内のffe136ed_{中略}.tmp←これは何なのでしょうか?

    Windows98SEを使っていますが、Windowsフォルダーに ffe136ed_{A6DF13E1-9FDB-11D6-9948-00402644B99D}.tmp のような名前のファイルが必ず自動生成されます。そしてPCの利用時間に応じて、この形式の名前のテンポラリーファイルが増えるようです。これまでは勝手に不要と判断し、ある程度累積すると削除して来ました。 そこで質問です。 (1) この形式の名前のファイルはどうして生成され、何の役割を担っているのでしょうか? (2) 自動生成されないように出来ますか? (3) 削除することは支障ないと思われますが、本当に大丈夫でしょうか?

  • シャットダウン時のファイル自動削除

    ご存知の方がいらっしゃったらご教授ください。 Windows2000またはWindowsXPproを載せているパソコンで、 あるフォルダ中のファイルをシャットダウン時に自動的に削除することは可能でしょうか? もし可能であればどのようにすればよいでしょうか?

  • インターネットエクスプローラ使用時に於けるTEMPフォルダの一時ファイル

    IE5.5SP2を使用しています。今とても気になっている事があるのですが、 IEを起動してメニューからお気に入りをプルダウンさせて展開させていくと、 C:\WINDOWS\TEMPフォルダに必ず「www*.tmp」というファイルが生成されます。 アスタリスクの部分は任意の文字列です。例えば「6F2C」といった感じの16進数 表記です。しかし中身をエディタで見てみるとインターネットショートカットと 全く同じなのです。で、IEを終了させた時点でこれらのファイルが消えてくれれば 問題はないというか気にはならないのですが、IEを終了させても残ったままです。 そして起動する度に増え続けるものですから時には気付けば数百個もこういった 一時ファイルがTEMPフォルダに存在しています。これらの一時ファイルを 生成させないようにするにはどうすれば宜しいでしょうか。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 現在は、AUTOEXEC.BATに「DEL C:\WINDOWS\TEMP\*.TMP >nul」などを 加えたりしてログオン時に削除しようと試みたりしているのですが、 加えたはずのコマンドが次回起動時にはなくなっていたりでほとほと 困っております。窓の手などのユーティリティを使用してログオン時に TEMPフォルダ内のファイルだけを削除する事も可能なのですが、「www~.tmp」 だけを削除する、といった事が出来ません。どなたかこの問題への対処法を 御存知の方がいらっしゃいましたら御教授願えないでしょうか。

  • ゴミ箱に記憶のないファイルがあります。

    ゴミ箱に「WLM5C54.tmp ファイルフォルダー」と「WLMED21.tmp ファイルフォルダー」が突然表示されます。元の場所は「WLMDSS.tmp」と表示されています。tmpは一時ファイルですから削除しても問題はありませんか?

  • win10 シャットダウン時に特定フォルダ削除

    Windows10でシャットダウンした時に、特定のフォルダを自動的に削除する方法はありますでしょうか?  ※シャットダウン用バッチを作成せずに実行したいです。   フォルダ名は固定ではなく、「特定文字列+ワイルドカード」です。 よろしくお願いします。

  • Linuxで世代管理されている/etc/tmpというファイル名のものが

    Linuxで世代管理されている/etc/tmpというファイル名のものがあり、とあるshを実行すると、最も大きい数字がついたtmpというファイルを削除したい。 例) tmp.txt tmp1.txt tmp2.txt tmp3.txt の中ではtmp3.txtを削除したい。

  • 一時ファイルの削除

    IE8を使っていますが、インターネット一時ファイルを削除したく閲覧の履歴から インターネット一時ファイルの削除にチェックを入れ削除を行うのですが Temporary Internet Filesのフォルダ内は削除されておりません。 一時ファイルのフォルダ=Temporary Internet Filesで合っていますでしょうか? もうひとつ、黒猫の落とし物というファイルは見た動画をキャッシュから 取得しますが、この取得する動画ファイルはどのフォルダに入っているのでしょうか? すっきり!!デフラグというソフトを使い一時ファイルや、動画キャッシュは削除できたのですが かなり時間がかかってしまい不便です。 質問としては時間をあまりかけずに、 一時ファイル(Temporary Internet Files)や動画のキャッシュの削除の仕方を 教えていただきたいです。

  • ディスククリーンアップしても残っている「.tmpファイル」

    Windows XPを使用しています。 常々「.tmpファイル」が溜まっているような気がして、ディスククリーンアップをこまめにしているのですが、今日、ふとwindowsの検索機能で「.tmp」を検索してみたところ、400以上のファイルやフォルダまでヒットしました。 ディスククリーンアップのときに「一時ファイル」にチェックしていたのに、これらがたくさん残っていたことが不思議です。 ちなみに、CCleanerというフリーソフトもダウンロードして使ってみましたが、まだ検索でたくさんのファイル&フォルダが出てきます。 こうやって出てきた、「.tmpファイル」および、「.tmp」の名前がつくフォルダ(コレの正体もよく分からないのですが)は全部選択して削除してしまっても良いものでしょうか?

  • ファイルを拡張子で仕分けて各フォルダに移動させたい

    私は、ダウンロードしたり、一時的に作成したファイルをtmpフォルダに入れて、 それから、拡張子によって仕分けて各フォルダに移動させます。 (mp4などならmovieフォルダ、zipなどならarchiveフォルダというように) しかし、分類から移動まで手作業なので効率が悪いです。 tmpフォルダにファイルが入ったら、自動的に仕分けて各登録フォルダに移動させるようなソフトはないでしょうか?

  • windows\temp\フォルダー内の一時ファイル

    windows\temp\フォルダー内の一時ファイルで "rds5133.TMP"等のように、"rds"で始まる一時ファイルが 沢山(時には100個以上)残ります。 一時ファイルなので、見附次第、削除していますが、 このファイルはどのソフトウエアが作って使用しているのでしょうか? そのプログラムの終了時に作った一時ファイルを消去して終了するように 設定できるのでしょうか?

専門家に質問してみよう