关于.net:可以在C#中将Byte []数组写入文件吗?

Can a Byte[] Array be written to a file in C#?

我正试图写出一个表示完整文件到文件的Byte[]数组。

来自客户机的原始文件通过TCP发送,然后由服务器接收。接收到的流被读取到一个字节数组,然后发送给这个类进行处理。

这主要是为了确保接收端TCPClient准备好进入下一个流,并将接收端与处理端分开。

FileStream类不将字节数组作为参数或另一个流对象(它允许您向其写入字节)。

我的目标是通过不同于原始线程(使用tcpclient的线程)的线程完成处理。

我不知道如何实现这一点,我应该尝试什么?


基于问题的第一句话:"我正试图写出一个byte[]数组,它代表一个文件的完整文件。"

阻力最小的路径是:

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

记录如下:

System.IO.File.WriteAllBytes - MSDN


您可以使用BinaryWriter对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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来完成此操作,它采用流,因此:

1
2
var bw = new BinaryWriter(File.Open("path",FileMode.OpenOrCreate);
bw.Write(byteArray);


可以使用filestream.write(byte[]数组,int offset,int count)方法将其写出。

如果您的数组名为"myarray",则代码为。

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

是的,为什么不呢?

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


尝试BinaryReader:

1
2
3
4
5
6
7
8
9
10
11
12
/// <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;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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);
    }