Сохранение файла (из потока) на диск с использованием С#
Возможный дубликат:
Как сохранить поток в файл?
У меня есть объект потока, который может быть изображением или файлом (msword, pdf). Я решил обрабатывать оба типа очень по-разному, так как я могу оптимизировать/сжать/изменить размер/создать эскизы и т.д. Я называю специальный способ сохранения изображения на диск, код:
var file = StreamObject;
//if content-type == jpeg, png, bmp do...
Image _image = Image.FromStream(file);
_image.Save(path);
//if pdf, word do...
Как я могу сохранить слова и pdf файлы?
//multimedia/ video?
Я посмотрел (не достаточно сложно), но я не мог найти его нигде...
Ответы
Ответ 1
Для типа файла вы можете положиться на FileExtentions и для записи на диск вы можете использовать BinaryWriter. или FileStream.
Пример (предположим, что у вас уже есть поток):
FileStream fileStream = File.Create(fileFullPath, (int)stream.Length);
// Initialize the bytes array with the stream length and then fill it with data
byte[] bytesInStream = new byte[stream.Length];
stream.Read(bytesInStream, 0, bytesInStream.Length);
// Use write method to write to the file specified above
fileStream.Write(bytesInStream, 0, bytesInStream.Length);
Ответ 2
Если вы используете .NET 4.0 или новее, вы можете использовать этот метод:
public static void CopyStream(Stream input, Stream output)
{
input.CopyTo(output);
}
Если нет, используйте этот:
public static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[8 * 1024];
int len;
while ( (len = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, len);
}
}
А вот как его использовать:
using (FileStream output = File.OpenWrite(path))
{
CopyStream(input, output);
}
Ответ 3
Я должен процитировать Jon (мастер С#) Skeet:
Хорошо, самым простым способом было бы откройте поток файлов, а затем используйте:
byte [] data = memoryStream.ToArray(); fileStream.Write(данные, 0, data.length);
Это относительно неэффективно, хотя, поскольку он включает в себя копирование буфера. Это прекрасно для небольших потоков, но для огромное количество данных, которые вы должны рассмотрите возможность использования:
fileStream.Write(memoryStream.GetBuffer(), 0, memoryStream.Position);
Ответ 4
Для фильтра:
//Check if the directory exists
if (!System.IO.Directory.Exists(@"C:\yourDirectory"))
{
System.IO.Directory.CreateDirectory(@"C:\yourDirectory");
}
//Write the file
using (System.IO.StreamWriter outfile = new System.IO.StreamWriter(@"C:\yourDirectory\yourFile.txt"))
{
outfile.Write(yourFileAsString);
}
Ответ 5
если данные уже действительны и уже содержат PDF, слово или изображение, вы можете использовать StreamWriter и сохранить его.
Ответ 6
Просто сделайте это с помощью простого фильтра.
var sr1 = new FileStream(FilePath, FileMode.Create);
sr1.Write(_UploadFile.File, 0, _UploadFile.File.Length);
sr1.Close();
sr1.Dispose();
_UploadFile.File - это байт [], а в FilePath вы можете указать расширение файла.