C# 从c中的流对象创建临时文件#

C# 从c中的流对象创建临时文件#,c#,stream,idisposable,using,C#,Stream,Idisposable,Using,给定一个包含xlsx文件的流对象,我想将其保存为临时文件,并在不再使用该文件时将其删除 我想创建一个类,实现IDisposable,并将其与using代码块一起使用,以便在最后删除临时文件 知道如何将流保存到临时文件中,并在使用结束时将其删除吗 谢谢 编辑: 对不起,也许只是我,但我可以发誓,当你最初发布这个问题时,你没有关于实现IDisposable的类的所有细节,等等。。。不管怎么说,我不太确定你在(编辑的?)问题中问了什么。但是这个问题:知道如何将流保存到temp文件并在使用结束时删除它吗

给定一个包含xlsx文件的流对象,我想将其保存为临时文件,并在不再使用该文件时将其删除

我想创建一个
,实现
IDisposable
,并将其与
using
代码块一起使用,以便在最后删除临时文件

知道如何将流保存到临时文件中,并在使用结束时将其删除吗

谢谢

编辑:


对不起,也许只是我,但我可以发誓,当你最初发布这个问题时,你没有关于实现IDisposable的类的所有细节,等等。。。不管怎么说,我不太确定你在(编辑的?)问题中问了什么。但是这个问题:
知道如何将流保存到temp文件并在使用结束时删除它吗?
非常简单。任何数量的谷歌搜索结果都会返回“.NETC#流到文件”或类似内容

我建议创建文件时使用
Path.GetTempFileName()
。但是其他的则取决于您的使用情况senario,例如,如果您想在temp creator类中创建它并在那里使用它,最好使用
关键字

您可以使用
Path.GetTempFileName()
获得临时文件名,创建一个
FileStream
写入,并使用
Stream.CopyTo
将输入流中的所有数据复制到文本文件中:

var stream = /* your stream */
var fileName = Path.GetTempFileName();

try
{
    using (FileStream fs = File.OpenWrite(fileName))
    {
        stream.CopyTo(fs);
    }

    // Do whatever you want with the file here
}
finally
{
    File.Delete(fileName);
}

这里的另一个办法是:

string fileName = "file.txt";
int bufferSize = 4096;

var fileStream = System.IO.File.Create(fileName, bufferSize, System.IO.FileOptions.DeleteOnClose)

// now use that fileStream to save the xslx stream
这样,文件将在关闭后被删除

编辑: 如果您不需要流活得太长(例如:只有一个写入操作或一个要写入的循环…),您可以按照建议将此流包装到using块中。这样,您就不必手动处理它

代码如下:

string fileName = "file.txt";
int bufferSize = 4096;

using(var fileStream = System.IO.File.Create(fileName, bufferSize, System.IO.FileOptions.DeleteOnClose))
{
    // now use that fileStream to save the xslx stream
}
您可以使用该类:


这样做的好处是,即使抛出异常,由于
using
块,临时文件也会被删除。默认情况下,这会将文件生成到系统上配置的临时文件夹中,但您也可以在调用
TempFileCollection
构造函数时指定自定义文件夹。

+1,是否可以使用
块将其包装在
中。当然,这是目前为止最好的答案。当您需要比使用块所能表达的寿命更长的生命周期时,这是一种解决方法。
string fileName = "file.txt";
int bufferSize = 4096;

using(var fileStream = System.IO.File.Create(fileName, bufferSize, System.IO.FileOptions.DeleteOnClose))
{
    // now use that fileStream to save the xslx stream
}
using (var tempFiles = new TempFileCollection())
{
    string file = tempFiles.AddExtension("xlsx");
    // do something with the file here 
}