Path.GetTempFileName and Path.GetTempPath. Then you can use this link to read/write encrypted data to the file.
Note, .NET isn't the best platform for critical security apps. You have to be well versed in how the CLR works in order to avoid some of the pitfalls that might expose your critical data to hackers.
Edit: About the race condition... You could use GetTempPath, then create a temporary filename by using
Path.Combine(Path.GetTempPath(), Path.ChangeExtension(Guid.NewGuid().ToString(), ".TMP"))