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?
相关问题
- Generic Generics in Managed C++
- How to Debug/Register a Permanent WMI Event Which
- What is the best way to do a search in a large fil
- 'System.Threading.ThreadAbortException' in
- Bulk update SQL Server C#
As long as the name of the folder doesn't need to be meaningful, how about using a GUID for them?
Something like...
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.
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.
guid Example:
C:\Documents and Settings\username\Local Settings\Temp\2dbc6db7-2d45-4b75-b27f-0bd492c60496
The advantage to using System.IO.Path.GetTempFileName is that it will be a file in the user's local (i.e., non-roaming) path. This is exactly where you would want it for permissions and security reasons.
There's a possible race condition when:
GetTempFileName()
, deleting it, and making a folder with the same name, orGetRandomFileName()
orGuid.NewGuid.ToString
to name a folder and creating the folder laterWith
GetTempFileName()
after the delete occurs, another application could successfully create a temp file with the same name. TheCreateDirectory()
would then fail.Similarly, between calling
GetRandomFileName()
and creating the directory another process could create a file or directory with the same name, again resulting inCreateDirectory()
failing.For most applications it's OK for a temp directory to fail due to a race condition. It's extremely rare after all. For them, these races can often be ignored.
In the Unix shell scripting world, creating temp files and directories in a safe race-free way is a big deal. Many machines have multiple (hostile) users -- think shared web host -- and many scripts and applications need to safely create temp files and directories in the shared /tmp directory. See Safely Creating Temporary Files in Shell Scripts for a discussion on how to safely create temp directories from shell scripts.