写文件时输出不同

时间:2012-04-24 11:41:07

标签: c# .net

我正在创建一个二进制文件,为此我正在使用

namespace BinaryStream
{
    class Program
    {
        static void Main(string[] args)
        {
            string filename = @"c:\happybirthday.txt";
            using (BinaryWriter binWriter =
    new BinaryWriter(File.Open(filename, FileMode.Create)))
            {
                string name = "Sachin";
                string wishes = "happy birthday";

                binWriter.Write(name.ToCharArray());
                binWriter.Write(wishes.ToCharArray());
            }



        }
    }
}

如果使用binWriter.Writer(name),则该文件包含一些特殊字符。但是,如果我将字符串转换为chararray并写入文件,该文件包含普通文本(没有任何特殊字符)。

这背后的原因是什么?

2 个答案:

答案 0 :(得分:2)

Write(string)重载的长度为前缀:

从这里开始:http://msdn.microsoft.com/en-us/library/yzxa6408.aspx

  

以长度为前缀的字符串表示前缀为的字符串长度   字符串是包含其长度的单个字节或单词   串。此方法首先将字符串的长度写为UTF-7   编码无符号整数,然后将多个字符写入   通过使用BinaryWriter实例的当前编码进行流式传输。

Write(char[])不是。当打开文本时,这些额外信息将显示为奇怪的数据。

在查看阅读行为时,这一点很明显。需要告诉BinaryReader.ReadChars要读取多少个字符,而BinaryReader.ReadString通过查看长度前缀来解决问题。

修改:可能重复,额外的信息:Difference in writing string vs. char array with System.IO.BinaryWriter

答案 1 :(得分:1)

BinaryWriter.Write(string)写入第一个长度,然后将该字符串写入文件中。所以你在文件中找到了指向该字符串长度的特殊字符。

此功能的Msdn描述:

以长度为前缀的字符串表示字符串长度,方法是在字符串前面加上包含该字符串长度的单个字节或单词。此方法首先将字符串的长度写为UTF-7编码的无符号整数,然后使用BinaryWriter实例的当前编码将该多个字符写入流中。