Ответ 1
Основываясь на первом предложении вопроса: "Я пытаюсь записать массив байтов [] , представляющий полный файл в файл."
Путь наименьшего сопротивления будет:
File.WriteAllBytes(string path, byte[] bytes)
Документировано здесь:
Я пытаюсь записать массив Byte[]
, представляющий полный файл в файл.
Исходный файл от клиента отправляется через TCP, а затем принимается сервером. Полученный поток считывается в байтовый массив и затем отправляется для обработки этим классом.
Это в основном для обеспечения того, чтобы принимающий TCPClient
был готов к следующему потоку и отделял принимающий конец от конца обработки.
Класс FileStream
не принимает байтовый массив в качестве аргумента или другого объекта Stream (что позволяет вам записывать в него байты).
Я пытаюсь получить обработку, выполненную другим потоком из оригинала (тот, который имеет TCPClient).
Я не знаю, как это реализовать, что я должен попробовать?
Основываясь на первом предложении вопроса: "Я пытаюсь записать массив байтов [] , представляющий полный файл в файл."
Путь наименьшего сопротивления будет:
File.WriteAllBytes(string path, byte[] bytes)
Документировано здесь:
Вы можете использовать объект 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
... позволяет сказать, что она оставлена как упражнение для читателя; -)
Существует статический метод System.IO.File.WriteAllBytes
Вы можете сделать это, используя System.IO.BinaryWriter
, который принимает поток так:
var bw = new BinaryWriter(File.Open("path",FileMode.OpenOrCreate);
bw.Write(byteArray);
Вы можете использовать метод FileStream.Write(byte [] array, int offset, int count), чтобы записать его.
Если ваше имя массива - "myArray", код будет.
myStream.Write(myArray, 0, myArray.count);
Да, почему бы и нет?
fs.Write(myByteArray, 0, myByteArray.Length);
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);
}