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