Подтвердить что ты не робот

Сохранение файла (из потока) на диск с использованием С#

Возможный дубликат:
Как сохранить поток в файл?

У меня есть объект потока, который может быть изображением или файлом (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?

Я посмотрел (не достаточно сложно), но я не мог найти его нигде...

4b9b3361

Ответ 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 вы можете указать расширение файла.