Creating temporary folders
I am working on a program that needs to create a multiple temporary folders for the application. These will not be seen by the user. The app is written in VB.net. I can think of a few ways to do it such as incremental folder name or random numbered folder names, but I was wondering, how other people solve this problem?
Solution 1:
Update: Added File.Exists check per comment (2012-Jun-19)
Here's what I've used in VB.NET. Essentially the same as presented, except I usually didn't want to create the folder immediately.
The advantage to use GetRandomFilename is that it doesn't create a file, so you don't have to clean up if your using the name for something other than a file. Like using it for folder name.
Private Function GetTempFolder() As String
Dim folder As String = Path.Combine(Path.GetTempPath, Path.GetRandomFileName)
Do While Directory.Exists(folder) or File.Exists(folder)
folder = Path.Combine(Path.GetTempPath, Path.GetRandomFileName)
Loop
Return folder
End Function
Random Filename Example:
C:\Documents and Settings\username\Local Settings\Temp\u3z5e0co.tvq
Here's a variation using a Guid to get the temp folder name.
Private Function GetTempFolderGuid() As String
Dim folder As String = Path.Combine(Path.GetTempPath, Guid.NewGuid.ToString)
Do While Directory.Exists(folder) or File.Exists(folder)
folder = Path.Combine(Path.GetTempPath, Guid.NewGuid.ToString)
Loop
Return folder
End Function
guid Example:
C:\Documents and Settings\username\Local Settings\Temp\2dbc6db7-2d45-4b75-b27f-0bd492c60496
Solution 2:
You have to use System.IO.Path.GetTempFileName()
Creates a uniquely named, zero-byte temporary file on disk and returns the full path of that file.
You can use System.IO.Path.GetDirectoryName(System.IO.Path.GetTempFileName())
to get only the temp folder information, and create your folders in there
They are created in the windows temp folder and that's consider a best practice
Solution 3:
Just to clarify:
System.IO.Path.GetTempPath()
returns just the folder path to the temp folder.
System.IO.Path.GetTempFileName()
returns the fully qualified file name (including the path) so this:
System.IO.Path.Combine(System.IO.Path.GetTempPath(), System.IO.Path.GetTempFileName())
is redundant.