可以将Byte []数组写入C#中的文件吗?

时间:2008-12-19 16:51:59

标签: c# .net

我正在尝试将代表完整文件的Byte[]数组写出来。

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

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

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

我的目标是通过与原始线程(具有TCPClient的线程)不同的线程完成处理。

我不知道如何实现这个,我该怎么办?

9 个答案:

答案 0 :(得分:665)

基于问题的第一句话:“我正在尝试将一个字节表示一个完整的文件写入文件。”

阻力最小的路径是:

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

此处记录:

  

System.IO.File.WriteAllBytes - MSDN

答案 1 :(得分:39)

您可以使用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部分...让我们说这是留给读者的练习; - )

答案 2 :(得分:19)

有一种静态方法System.IO.File.WriteAllBytes

答案 3 :(得分:11)

您可以使用System.IO.BinaryWriter来执行此操作,因此需要使用Stream:

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

答案 4 :(得分:8)

您可以使用FileStream.Write(byte[] array, int offset, int count)方法将其写出来。

如果您的数组名称为“myArray”,则代码为。

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

答案 5 :(得分:5)

是的,为什么不呢?

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

答案 6 :(得分:1)

Asp.net(c#)

//这是托管应用程序的服务器路径。

var path = @"C:\Websites\mywebsite\profiles\";

//以字节数组表示的文件

var imageBytes = client.DownloadData(imagePath);

//文件扩展名

var fileExtension = System.IO.Path.GetExtension(imagePath);

///在给定路径上写入(保存)文件。附加员工ID作为文件名和文件扩展名。

File.WriteAllBytes(path + dataTable.Rows[0]["empid"].ToString() + fileExtension, imageBytes);

下一步:

您可能需要为iis用户提供对配置文件文件夹的访问权限。

  1. 右键单击配置文件文件夹
  2. 转到“安全性”标签
  3. 点击“编辑”,
  4. 完全控制“ IIS_IUSRS”(如果该用户不存在,则单击添加并键入“ IIS_IUSRS”并单击“检查名称”。)

答案 7 :(得分:0)

尝试使用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;
}

答案 8 :(得分:-1)

192.168.1.1 has 1000 at 2015-07-20 15:00:00
192.168.1.2 has 2000 at 2015-07-20 15:00:00
192.168.1.3 has 3000 at 2015-07-20 15:00:00