17185

[code]

    開発環境: C++ Builder XE4
    
[/code]

Windows (7/8.1)において、一時ファイルを作成して利用したいと考えています。

使用イメージは以下です。  
1\. 自作ソフトからhtmlファイル（一部ファイル）を作成  
2\. 自作ソフトからChrome(またはIE)を起動し、htmlファイルを表示  
3\. ユーザがhtmlファイル閲覧を終えるとブラウザを閉じる

1から3のすべてを自作で管理している場合は、３の処理が終了次第、一時ファイルを削除すればいいのですが、3でブラウザにコントロールを渡しているため、いつ終了したかの判断は自作ソフト側ではできません。

そこで、一時ファイルが自動的に削除される方法があれば、と考えています。

Windowsのシステムでは、ある特定のフォルダにファイルを置いておけば自動的に削除される、というようなフォルダはありましたでしょうか？
(linuxの/tmpのようなもの).


CC BY-SA 3.0
2015-09-27T02:14:39.563
16984
2015-10-18T21:08:58.690
4840
question
windows
Windows > 一時ファイル > 後で自動的に消えてくれるもの


[CreateFile](https://msdn.microsoft.com/en-
us/library/windows/desktop/aa363858%28v=vs.85%29.aspx)にはFILE_FLAG_DELETE_ON_CLOSEフラグが存在します。これを指定するとファイルを作成したプロセス（この場合は自作ソフト）の終了時にそのファイルが自動的に削除されます。


CC BY-SA 3.0
2015-09-27T02:28:10.847
16985
2015-09-27T02:28:10.847
4236
16984
answer


ファイル作成時に`FILE_FLAG_DELETE_ON_CLOSE`を指定する、という回答がついていますが手元で試した範囲ではこの方法は動かなかったので別案を回答しておきます。

まず、Linuxの`/tmp`が自動で消えるのは、単に「古いファイルを消す」という処理が定期的に走っているからです。ただしこれは当たり前のことではなく、ディストリビューションによって異なります。ということで、/tmpに一時ファイルを置いたからと行って確実に消えるというものでもありません。

…というレベルで確実でなくてもよいがある程度消したい、という話でしたら、ファイル名のプレフィクス/ポストフィクスやサブフォルダに保存するなど自分が作った一時ファイルだということがわかる工夫をして、起動時に
_前回までに作られたファイル_ を消すという考え方もあります。

ある程度確実に一時的にファイルを消したいのであれば、呼び出した別プログラムの終了を待つ小さなプロセスを残しておく、という方法が考えられます。


CC BY-SA 3.0
2015-10-02T08:54:48.980
17185
2015-10-02T08:54:48.980
5793
16984
answer


~~MoveFile~~ MoveFileEx
APIでMOVEFILE_DELAY_UNTIL_REBOOTを指定すれば、再起動時にファイルを削除するということは出来ます。linuxの/tmpの様に定期的に削除する設定はないので、同様というわけにはいきませんが。

確実なのは自アプリケーション用にフォルダを作成。タイムスタンプの古いファイルを自動的に削除するプログラムをタスクに登録して定期的に削除することです。これなら/tmpど同様の機能を実現できます。


CC BY-SA 3.0
2015-10-17T04:25:05.650
17742
2015-10-18T21:08:58.690
2015-10-18T21:08:58.690
12774
12774
16984
answer