创建文件时获取特殊字符

时间:2018-04-05 07:54:29

标签: c# .net filestream streamwriter

我正在将文本写入文件,但在开头添加了特殊字符。任何人都可以指导它为什么会发生,我们如何避免它。

 using (FileStream fs = new FileStream(FILE_NAME, FileMode.CreateNew))
            {
                using (BinaryWriter w = new BinaryWriter(fs))
                {
                    w.Write(@"
COMMENT: OnDemand Generic Index File Format
COMMENT: This file has been generated by DOC Application
COMMENT: date");
                 }
             }

当我打开这个文件时,我在起点上得到了特殊的角色:

  

A

     

评论:OnDemand通用索引文件格式评论:此文件具有   由DOC Application生成

     

评论:日期

2 个答案:

答案 0 :(得分:1)

BinaryWriter用于在与BinaryReader配对时编写二进制文件 - 它为简单序列化程序中所需的一系列常见类型实现了一个非常简单的协议 - 例如字符串是以长度为前缀的。你在Â看到的是:长度前缀。

基本上,不要使用BinaryWriter来编写文本文件。使用File.WriteAllText(对于单个字符串)或File.CreateText将为您提供TextWriter(具体而言,为StreamWriter)。

所以:

File.WriteAllText(FILE_NAME, @"
COMMENT: OnDemand Generic Index File Format
COMMENT: This file has been generated by DOC Application
COMMENT: date");

或:

using(var file = File.CreateText(FILE_NAME))
{
    file.Write(...); // etc
}

答案 1 :(得分:-1)

这是一个编码问题,它曾经发生在我的所有文件中。稍微播放之后,这是最简单的方法,首先使用显式编码获取字节,然后BinaryWriter.Write将不需要错误地猜测编码:

byte[] mybytes = System.Text.Encoding.ASCII.GetBytes(@"
COMMENT: OnDemand Generic Index File Format
COMMENT: This file has been generated by DOC Application
COMMENT: date");

using (FileStream fs = new FileStream(@"C:\temp\2.txt", FileMode.CreateNew))
{
    using (BinaryWriter w = new BinaryWriter(fs))
    {
        w.Write(mybytes);
    }
}