可能重复:
Creating tempory folders
我正在寻找类似Python中的tempfile
模块的东西:一种(最好)安全的方式来打开文件进行写入。当我完成时,这应该很容易删除...
看起来,.NET没有tempfile
模块的“包含电池”功能,它不仅会创建文件,还会返回文件描述符(旧学校,我知道......)随着路径。同时,它确保只有创建用户才能访问该文件等等(mkstemp()
我认为):https://docs.python.org/library/tempfile.html
答案 0 :(得分:24)
之前我也有同样的要求,我已经创建了一个小类来解决它:
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...
}
答案 1 :(得分:7)
Path.GetTempFileName和Path.GetTempPath。然后,您可以使用this link将加密数据读/写到文件中。
注意,.NET不是关键安全应用程序的最佳平台。您必须精通CLR的工作原理,以避免可能将您的关键数据暴露给黑客的一些陷阱。
编辑:关于竞争条件......您可以使用GetTempPath,然后使用
创建临时文件名Path.Combine(Path.GetTempPath(), Path.ChangeExtension(Guid.NewGuid().ToString(), ".TMP"))
答案 2 :(得分:0)
我不知道有任何内置(在框架内)类来执行此操作,但我认为滚动自己不会有太多问题。
显然,这取决于您要写入的数据类型,以及所需的“安全性”。
关于DevFusion的This article可能是一个很好的起点吗?