关于C#:将字节数组写入文本文件

Writing a Byte Array to a text file

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

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

但当我将data写入记事本文件时,我得到了以下信息:

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

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

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

我怎样才能像在屏幕上显示的那样将它写入文本文件?


两种方法都要做同样的事情。

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

在阅读这个问题时,我假设字节数组格式在字节0处只是"长度",那么其余的必须作为ANSI或ASCII字符(每个字符1个字节)的解释写入。

每12个字节和换行符之间放置一个制表符。

所以我会这样做:

1
2
3
4
5
6
7
8
 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中有文本(使用代码),就可以执行以下操作:

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

或者更清楚:

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

(我假设这里有一个winforms RichTextBox,但以控件的名称,我敢打赌)