Можно ли записать массив Byte [] в файл в C #?

Я пытаюсь выписатьByte[] массив, представляющий полный файл в файл.

Исходный файл от клиента отправляется через TCP, а затем принимается сервером. Полученный поток считывается в байтовый массив и затем отправляется для обработки этим классом.

Это в основном для обеспечения того, чтобы получениеTCPClient готов к следующему потоку и отделить принимающую сторону от обрабатывающей стороны.

FileStream Класс не принимает байтовый массив в качестве аргумента или другого объекта Stream (который позволяет вам записывать байты в него).

Я стремлюсь к тому, чтобы обработка выполнялась потоком, отличным от исходного (с TCPClient).

Я не знаю, как это реализовать, что мне попробовать?

Ответы на вопрос(8)

Вы можете сделать это используяSystem.IO.BinaryWriter который принимает поток так:

var bw = new BinaryWriter(File.Open("path",FileMode.OpenOrCreate);
bw.Write(byteArray);
 vitor_gaudencio_oliveira10 июн. 2017 г., 15:49
Не забудьте использовать Dispose;
 dekdev12 апр. 2013 г., 17:03
Просто хочу добавить, после записи добавить bw.flush и bw.close
 Tomas26 окт. 2015 г., 16:43
@dekdev: нет смысла звонитьFlush() доClose() какClose() будет смывать Еще лучше использоватьusing пункт, который также будет flush'n'close.
Решение Вопроса

«Я пытаюсь записать массив Byte []представляет полный файл в файл. "

Путь наименьшего сопротивления будет:

File.WriteAllBytes(string path, byte[] bytes)

Документировано здесь:

System.IO.File.WriteAllBytes - MSDN

System.IO.File.WriteAllBytes

public ActionResult Document(int id)
    {
        var obj = new CEATLMSEntities().LeaveDocuments.Where(c => c.Id == id).FirstOrDefault();
        string[] stringParts = obj.FName.Split(new char[] { '.' });
        string strType = stringParts[1];
        Response.Clear();
        Response.ClearContent();
        Response.ClearHeaders();
        Response.AddHeader("content-disposition", "attachment; filename=" + obj.FName);
        var asciiCode = System.Text.Encoding.ASCII.GetString(obj.Document);
        var datas = Convert.FromBase64String(asciiCode.Substring(asciiCode.IndexOf(',') + 1));
        //Set the content type as file extension type
        Response.ContentType = strType;
        //Write the file content
        this.Response.BinaryWrite(datas);
        this.Response.End();
        return new FileStreamResult(Response.OutputStream, obj.FType);
    }
 Alexey20 июл. 2015 г., 11:39
Вы можете улучшить ответ, добавив к нему описание.
 Zolfaghari06 нояб. 2017 г., 09:21
Я использую некоторую часть кода и буду полезен для меня, +1 голос.
 Roberto Bonini21 июл. 2015 г., 19:37
Это похоже на фрагмент ASP.Net? Конечно, он преобразует текст в байтовый массив, а затем записывает его в поток. На самом деле не отвечает на мой первоначальный вопрос.
 kleopatra20 июл. 2015 г., 11:38
пожалуйста, рассмотрите возможность добавления пояснения к фрагменту кода :-)

Да, почему нет?

fs.Write(myByteArray, 0, myByteArray.Length);

Вы можете использоватьBinaryWriter объект.

protected bool SaveData(string FileName, byte[] Data)
{
    BinaryWriter Writer = null;
    string Name = @"C:\temp\yourfile.name";

    try
    {
        // Create a new stream to write to the file
        Writer = new BinaryWriter(File.OpenWrite(Name));

        // Writer raw data                
        Writer.Write(Data);
        Writer.Flush();
        Writer.Close();
    }
    catch 
    {
        //...
        return false;
    }

    return true;
}

Редактировать: Ой, забылfinally часть ... допустим, это оставлено в качестве упражнения для читателя ;-)

 Cannon18 июн. 2011 г., 08:56
понял я. Благодарю.
 Treb15 июн. 2011 г., 12:52
@buffer_overflow: вам нужно сначала сжать его, если вы хотите вернуть исходный файл. Взгляните на Pattern Decorator для возможной реализации:en.wikipedia.org/wiki/Decorator_pattern
 Jeff Bridgman31 мар. 2017 г., 15:39
BinaryWriter одноразовый, поэтому, вероятно, следует использовать в течениеusing блок. Это также означало бы, что вы могли бы отказаться от некоторых дополнительных звонков, так какисходный код показывает, что он делает некоторую очистку при утилизации.
 Cannon15 июн. 2011 г., 05:52
Допустим, я получил сжатые данные и распаковал их в байт []. Возможно ли создать файл обратно, используя вышеуказанную функцию? Любой учебник или демо онлайн?

Попробуйте BinaryReader:

/// <summary>
/// Convert the Binary AnyFile to Byte[] format
/// </summary>
/// <param name="image"></param>
/// <returns></returns>
public static byte[] ConvertANYFileToBytes(HttpPostedFileBase image)
{
    byte[] imageBytes = null;
    BinaryReader reader = new BinaryReader(image.InputStream);
    imageBytes = reader.ReadBytes((int)image.ContentLength);
    return imageBytes;
}

FileStream.Write (массив byte [], int offset, int count) способ выписать это.

Если ваше имя массива "myArray", код будет.

myStream.Write(myArray, 0, myArray.count);

Ваш ответ на вопрос