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

Каков наиболее эффективный способ сохранения массива байтов как файла на диске в С#?

Довольно простой сценарий. У меня есть веб-служба, которая получает массив байтов, который должен быть сохранен как определенный тип файла на диске. Каков наиболее эффективный способ сделать это на С#?

4b9b3361

Ответ 2

System.IO.File.WriteAllBytes(path, data) должен преуспеть.

Ответ 3

И WriteAllBytes просто выполняет

using (FileStream stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read))
{
    stream.Write(bytes, 0, bytes.Length);
}

BinaryWriter имеет вводящее в заблуждение имя, оно предназначено для записи примитивов в виде представлений байтов вместо написания двоичных данных. Весь его метод Write (byte []) выполняет функцию Write() в потоке, используя ее, в этом случае FileStream.

Ответ 5

Возможно, будут полезны классы System.IO.BinaryWriter и BinaryReader.

http://msdn.microsoft.com/en-us/library/system.io.binarywriter.aspx

"Записывает примитивные типы в двоичном виде в поток и поддерживает запись строк в определенной кодировке."

http://msdn.microsoft.com/en-us/library/system.io.binaryreader.aspx

"Читает примитивные типы данных как двоичные значения в конкретной кодировке."

Ответ 6

У меня была аналогичная проблема, сбрасывающая массив байтов размером 300 МБ в файл диска...
Я использовал StreamWriter, и мне потребовалось 30 минут, чтобы сбросить файл.
Использование FilePut заняло около 3-4 минут, и когда я использовал BinaryWriter, файл был сброшен через 50-60 секунд.
Если вы используете BinaryWriter, вы получите лучшую производительность.

Ответ 7

На самом деле наиболее эффективным способом было бы передавать данные и записывать их по мере их получения. WCF поддерживает потоковое вещание, поэтому это может быть то, что вы хотели бы изучить. Это особенно важно, если вы делаете это с большими файлами, так как вы почти наверняка не хотите, чтобы содержимое файла в памяти было как на сервере, так и на клиенте.