Dar*_*mas 15 c# temporary-files
可能重复:
创建临时文件夹
我正在寻找类似于tempfilePython中的模块的东西:一种(最好)安全的方式来打开文件进行写入.当我完成时,这应该很容易删除...
看起来,.NET没有tempfile模块的"电池包含"功能,它不仅创建文件,而且还将文件描述符(旧学校,我知道......)与路径一起返回.同时,它确保只有创建用户可以访问该文件和什么(mkstemp()我认为):https://docs.python.org/library/tempfile.html
啊,是的,我可以看到.但GetTempFileName确实有一个缺点:在创建文件(调用GetTempFileName创建0字节文件)和打开它(返回GetTempFileName之后)之间存在竞争条件.这可能是一个安全问题,但不适用于我目前的应用......
Jor*_*dão 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;
}
}
Run Code Online (Sandbox Code Playgroud)
它会在您指定的文件夹或系统临时文件夹中创建临时文件.它是一个一次性类,所以在它的生命结束时(Dispose或者是析构函数),它会删除文件.您将通过该FilePath属性获取创建的文件(和路径)的名称.您当然可以扩展它以打开文件进行写入并返回其关联FileStream.
示例用法:
using (var tempFile = new TemporaryFile()) {
// use the file through tempFile.FilePath...
}
Run Code Online (Sandbox Code Playgroud)
小智 7
Path.GetTempFileName和Path.GetTempPath.然后,您可以使用此链接将加密数据读/写到文件中.
注意,.NET不是关键安全应用程序的最佳平台.您必须精通CLR的工作方式,以避免可能将您的关键数据泄露给黑客的一些陷阱.
编辑:关于竞争条件...您可以使用GetTempPath,然后使用创建临时文件名
Path.Combine(Path.GetTempPath(), Path.ChangeExtension(Guid.NewGuid().ToString(), ".TMP"))
Run Code Online (Sandbox Code Playgroud)