FrozenHeart
FrozenHeart

Reputation: 20736

Is it safe enough to store a file in the TEMP directory

Is it safe enough to store a file in the %TEMP% directory via GetTempPath, GetTempPath and CreateFile for more than two hours? Is there any guarantees that this file won't be deleted earlier?

Thanks in advance.

Upvotes: 1

Views: 252

Answers (4)

Hans Passant
Hans Passant

Reputation: 941277

A file you create in the TEMP directory must be created with the CreateFile's FILE_FLAG_DELETE_ON_CLOSE option. This ensures that the file will always be cleaned-up and you cannot spray garbage files, even if your program crashes before it has a chance to delete the file again.

This option then also inevitably forces you to do the Right Thing, keeping the file opened while you are using it. Which in turn prevents anybody from the deleting the file, even if they use a sledge-hammer.

Lots of programs don't follow this advice and a user's TEMP directory tends to be a big olde mess, forcing the user to clean it up manually once in a while. A built-in feature of Windows, he'll use the "Disk Cleanup" applet. The kind of scenario where you will lose the file if you don't follow this advice. Best to use %AppData% instead.

Upvotes: 2

Serge Ballesta
Serge Ballesta

Reputation: 148880

If you do not want that another process can delete your files, just keep them open with a share mode of FILE_SHARE_READ | FILE_SHARE_WRITE. That way any attempt to delete them will fail, but any other process will be able to read or write them.

BTW : this is not related with the files living in %TEMP% folder.

If you cannot have a process to keep them open all the time, you must rely on other processes (and other users) on your system not doing anything ...

Upvotes: 0

peterchen
peterchen

Reputation: 41096

To prevent the file from being deleted, you can keep a handle open (assuming the application is running the whole time) and do not specify FILE_SHARE_DELETE (and, if applicable, neither FILE_SHARE_WRITE).

Alternative:

Use a path in %APPDATA% or %PROGRAMDATA% that you clear yourself regulary, or let the user specify a path.

In addition, you could register a scheduled task to clean the folder regulary.

Upvotes: 0

xMRi
xMRi

Reputation: 15355

There are no guarantees. This folder is usually not cleared except the user starts any cleanup.

But everyone can delete files here. And it is wise to do that on a regular base

Upvotes: 0

Related Questions