I’d like to create a unique temporary directory in Windows from some C
code (not C++ or C#). I want to do this so that I can put some temp
files in the directory, and then delete them all easily when I’m done
(by removing the directory recursively).
I’m essentially looking for an equivalent of the linux
mkdtemp
function. There is a C# answer here, and responses on this
question
suggest using Boost. But since I’m using C, those solutions don’t work
for me.
The best I’ve been able to come up with so far is to use
GetTempFileName
followed by CreateDirectory,
but the problem there is that if I ask
GetTempFileName
to create a unique file name, it will also create the file (which I
don’t want, since I want to make a directory instead).
Relatedly, there’s
GetTempPath,
which returns the location of the user’s temp folder from environment
variables – but since I want to create my own directory that I can
safely delete later, I still need to create a directory inside any
path it would return.
It looks like if I want a unique directory to be created, I’ll have to
create a temp file, get the name, delete it, and then create a
directory with the same name – which sounds very messy.
Any other ideas?
You can use what
GetTempPathreturns concatenated with a Guid to ensure uniqueness of the directory. You can create a Guid using UuidCreate or CoCreateGuid Function.To delete recursively the directory, there is an example here in pure C: How to remove directory recursively? based on FindFirstFile, FindNextFile, DeleteFile and RemoveDirectory.
There is also SHFileOperation but it’s more heavyweight and is based on the Windows Shell functions, and the Shell DLLs are not always wanted, especially if you’re writing server code.