将字节数组写入文本文件

时间:2015-01-20 17:14:27

标签: c# bytearray

尝试将字节数组中的值写入文本文件。当我将数据写入屏幕上的文本框时,它会正确显示,但不会在我打开文本文件时显示。以下是我将其显示在屏幕上的方式:

foreach (ManagementObject FailData in FailDataSet)
{
    Byte[] data = (Byte[])FailData.Properties["VendorSpecific"].Value;

    for (int i = 0; i < data[0] - 1; i++)
    {
        for (int j = 0; j < 12; j++)
        {
            richTextBox2.Text = richTextBox2.Text + data[i * 12 + j] + "\t";
        }
        richTextBox2.Text = richTextBox2.Text + "\n";
    }
}

但是当我将data写入记事本文件时,我得到以下内容:

  

/ db%dd#?d 2 cct 3 dd0 ......

这是我如何将字节数组写入文本文件

File.WriteAllBytes(@"c:\folder\file.txt", data);

如何将其以与屏幕上显示相同的方式写入文本文件?

2 个答案:

答案 0 :(得分:3)

两种方式做同样的事情。

Byte[] data = (Byte[])FailData.Properties["VendorSpecific"].Value;
var sb = new StringBuilder();

for (int i = 0; i < data[0] - 1; i++)
{
    for (int j = 0; j < 12; j++)
    {
        sb.Append(data[i * 12 + j] + "\t");
    }
    sb.AppendLine();
}
File.WriteAllText("filename.ext", sb.ToString());

答案 1 :(得分:0)

阅读问题,我假设字节数组格式在字节0只是“长度”,其余部分必须写为ANSI或ASCII字符的解释(每个字符1个字节)。

您每隔12个字符和换行符之间放置一个标签。

所以我会这样做:

 var data = (byte[])FailData.Properties["VendorSpecific"].Value;
 var sb = new StringBuilder();
 for(var i = 0; i < data[0]-1; i++)
 {
   sb.Append(data[i+1] + "\t");
   if((i % 12)==11) sb.AppendLine();
 }
 File.WriteAllText(@"c:\folder\file.txt", sb.ToString());

否则,一旦你在RichTextBox中有了文本(使用你的代码),你就可以这样做:

File.WriteAllText(@"c:\folder\file.txt", richTextBox2.Text);

或更清楚:

richTextBox2.SaveFile(@"c:\folder\file.txt", RichTextBoxStreamType.PlainText);

(我在这里假设一个WinForms RichTextBox,但是取了控件的名字,我敢打赌它)