Создание временного файла из объекта stream в c#
учитывая объект stream, который содержит файл xlsx, я хочу сохранить его как временный файл и удалить его, когда он больше не использует файл.
Я думал о создании class
, что реализация IDisposable
и с using
блок кода для удаления временного файла в конце.
любая идея, как сохранить поток во временный файл и удалить его в конце использовать?
спасибо
5 ответов
можно использовать TempFileCollection класс:
using (var tempFiles = new TempFileCollection())
{
string file = tempFiles.AddExtension("xlsx");
// do something with the file here
}
что приятно об этом является то, что даже если исключение выдается временный файл гарантированно будет удален, спасибо using
блок. По умолчанию это создаст файл во временную папку, настроенную в системе, но вы также можете указать пользовательскую папку при вызове TempFileCollection
конструктор.
вы можете получить временное имя файла с помощью 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
таким образом, файл будет удален после закрытия.
Edit:
Если вам не нужен поток, чтобы жить слишком долго (например: только одна операция записи или один цикл написать...), вы можете, как было предложено, обернуть этот поток в блок 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
}
// Get a random temporary file name w/ path:
string tempFile = Path.GetTempFileName();
// Open a FileStream to write to the file:
using (Stream fileStream = File.OpenWrite(tempFile)) { ... }
// Delete the file when you're done:
File.Delete(tempFile);
EDIT:
Извините, может быть, это только я, но я мог бы поклясться, что когда вы изначально разместили вопрос, у вас не было всех деталей о классе, реализующем IDisposable, и т. д... в любом случае, я не совсем уверен, что вы спрашиваете в своем (отредактированном?) вопрос. Но этот вопрос:--1--> довольно прямолинейно. Любое количество результатов google вернется для ".NET C# Stream to File" или такого.
Я просто предлагаю для создания использовать файл Path.GetTempFileName()
. но другие зависят от вашего использования senario, например, если вы хотите создать его в своем классе temp creator и использовать его только там, хорошо использовать using
ключевое слово.