Можно ли записать массив Byte [] в файл в C #? - PullRequest
316 голосов
/ 19 декабря 2008

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

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

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

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

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

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

Ответы [ 8 ]

666 голосов
/ 19 декабря 2008

На основании первого предложения вопроса: "Я пытаюсь записать массив байтов [] , представляющий полный файл в файл."

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

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

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

System.IO.File.WriteAllBytes - MSDN

39 голосов
/ 19 декабря 2008

Вы можете использовать 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 ... допустим, это оставлено в качестве упражнения для читателя; -)

19 голосов
/ 19 декабря 2008

Есть статический метод System.IO.File.WriteAllBytes

11 голосов
/ 19 декабря 2008

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

var bw = new BinaryWriter(File.Open("path",FileMode.OpenOrCreate);
bw.Write(byteArray);
8 голосов
/ 19 декабря 2008

Вы можете использовать метод FileStream.Write (массив byte [], int offset, int count) для его записи.

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

myStream.Write(myArray, 0, myArray.count);
5 голосов
/ 19 декабря 2008

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

fs.Write(myByteArray, 0, myByteArray.Length);
0 голосов
/ 26 февраля 2018

Попробуйте 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;
}
0 голосов
/ 20 июля 2015
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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...