我以前也有同样的要求,我已经创建了一个小类来解决它:
public sealed class TemporaryFile : IDisposable { public TemporaryFile() : this(Path.GetTempPath()) { } public TemporaryFile(string directory) { Create(Path.Combine(directory, Path.GetRandomFileName())); } ~TemporaryFile() { Delete(); } public void Dispose() { Delete(); GC.SuppressFinalize(this); } public string FilePath { get; private set; } private void Create(string path) { FilePath = path; using (File.Create(FilePath)) { }; } private void Delete() { if (FilePath == null) return; File.Delete(FilePath); FilePath = null; } }
它会在您指定的文件夹或系统临时文件夹中创建临时文件.它是一个一次性类,所以在它的生命结束时(Dispose
或者是析构函数),它会删除文件.您将通过该FilePath
属性获取创建的文件(和路径)的名称.您当然可以扩展它以打开文件进行写入并返回其关联FileStream
.
示例用法:
using (var tempFile = new TemporaryFile()) { // use the file through tempFile.FilePath... }
Path.GetTempFileName和Path.GetTempPath.然后,您可以使用此链接将加密数据读/写到文件中.
注意,.NET不是关键安全应用程序的最佳平台.您必须精通CLR的工作方式,以避免可能将您的关键数据泄露给黑客的一些陷阱.
编辑:关于竞争条件...您可以使用GetTempPath,然后使用创建临时文件名
Path.Combine(Path.GetTempPath(), Path.ChangeExtension(Guid.NewGuid().ToString(), ".TMP"))