FileStream Write()方法仅写入未知符号

时间:2012-01-18 15:21:01

标签: c# filestream

这是我的代码,它只在fileout.txt中写入此符号。什么是错的,如何解决?

byte[] bArray = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
        FileStream file_out = new FileStream(@"C:\fileout.txt",
            FileMode.Create);

        file_out.Write(bArray, 2, 4);

        file_out.Close();
抱歉,这里没有显示符号,但为什么我不知道。这个符号类似于上升和小r等一些其他符号。

3 个答案:

答案 0 :(得分:4)

您的输出是实际的字节数,而不是代表讲英语的人(以及许多其他语言,但不是全部)的字符。

你写的字符是一些主要是历史感兴趣的控件,虽然ANPA-1312仍然被美联社使用并使用它们:

START OF TEXT在文本的实际文本之前。 (0x01,您跳过的是标题的开头。

END OF TEXT文本结束。此外,Ctrl + C结束正在运行的DOS程序就是这个控件。

结束传输再见。用作注销字符。

询问你还在吗?

阵列中要打印的内容还包括:

NULL(null char,而不是null在C#中的含义):在某些格式中用于表示字符串的结尾,“有意义的文本结束”等。

START OF HEADER:上面提到过。

承认是的,我在这里。也用于TCP / IP握手。

BELL如果你发送它们,仍然会有打印机。

BACKSPACE打印u,然后退格,然后¨,这就是你写ü的方法。请记住,如果Unicode似乎比ASCII更复杂。实际上,拥有ü更简单。还有后退,X和后退,X和后退,X是旧的“删除”!

CHARACTER选择您可能在现代代码中使用的第一个字符,这些字符的级别不是很低。 “标签”字符。当然,它本身看起来并不多。

您可能想要的是输出字符'0''1'等。

你可以:

手动编码。 '0'为0x30,'1'为0x31。这是你应该知道如何去做的事情之一,但实际上并不是99%的时间都是你自己做的事情。

使用文字撰写人。这将获取不同类型的值,并(可选择使用已定义的格式规则)输出表示它们的文本。因此

using(FileStream file_out = new FileStream(@"C:\fileout.txt", FileMode.Create)
using(TextWriter tw = new StreamWriter(file_out))
  for(int i = 2; i != 6; ++i)
    tw.Write(bArray[i]);

这会将字节转换为人类可读的等价物,并且效率非常高。它与输出0x32,0x33,0x34,0x35相同,在记事本中打开时看起来像“2345”。

如果您从其他地方接收字节(例如从某处创建或获取图像流)或执行非常低级别的操作,您将主要想直接写入字节。

答案 1 :(得分:1)

是的,你正在写出字节2,3,4,5。这些不是我所知道的任何编码中的可打印文本。

我不清楚您的期望,或为什么您希望它最终成为可打印的文本 - 但是如果您想要写 text (如与二进制数据相反,你应该使用某种形式的TextWriter,例如StreamWriter

答案 2 :(得分:1)

您应该使用类似

的内容
    public static void Main()
    {
        byte[] bArray = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

        using (StreamWriter outfile =
        new StreamWriter(@"C:\\fileout.txt"))
        {
            foreach (var b in bArray)
            {
                outfile.Write(b);
            }
        }

        Console.ReadLine();
    }

这将导致包含

的文本文件
  

0123456789