Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 添加到文件开头的不规则字符_C# - Fatal编程技术网

C# 添加到文件开头的不规则字符

C# 添加到文件开头的不规则字符,c#,C#,我正在学习微软关于创建和写入简单文件的教程,我得到了意想不到的结果 我实际上是在向文件中写入XML文本,而不是向文件中写入一系列数字。但它在一开始就添加了“Ł”,我不知道为什么 代码如下: public static void CreateFile(string xml) { var dateStamp = DateTime.Now.ToString("yyyy-MM-dd"); var fileName = "file_" + dateStam

我正在学习微软关于创建和写入简单文件的教程,我得到了意想不到的结果

我实际上是在向文件中写入XML文本,而不是向文件中写入一系列数字。但它在一开始就添加了“Ł”,我不知道为什么

代码如下:

    public static void CreateFile(string xml)
    {
        var dateStamp = DateTime.Now.ToString("yyyy-MM-dd");
        var fileName = "file_" + dateStamp + ".xml";
        if (File.Exists(fileName))
        {
            Console.WriteLine("File already exists.");
            return;
        }

        using (FileStream fileStream = new FileStream(fileName, FileMode.CreateNew))
        {
            using (BinaryWriter writer = new BinaryWriter(fileStream))
            {
                writer.Write(xml);
            }
        }
    }

这是因为您正在使用
BinaryWriter
将数据写入文件。它将以稍后可以读取的方式写入字符串,因此它将首先将字符串长度写入文件,然后写入字符串数据

只需将文件改为文本文件即可。您可以使用
StreamWriter
,或者只需使用
File
类中的一个静态帮助器方法即可为您打开、写入和关闭文件:

File.WriteAllText(fileName, xml);

这是因为您正在使用
BinaryWriter
将数据写入文件。它将以稍后可以读取的方式写入字符串,因此它将首先将字符串长度写入文件,然后写入字符串数据

只需将文件改为文本文件即可。您可以使用
StreamWriter
,或者只需使用
File
类中的一个静态帮助器方法即可为您打开、写入和关闭文件:

File.WriteAllText(fileName, xml);

当您阅读本手册时,其内容如下:

将长度前缀字符串写入此流

所以“不适当”字符实际上是字符串的长度

您应该使用基于的编写器(例如)或任何其他可用的方法来输出文本文件


此外,您还应注意文本的编码具体地说,当您试图输出XML时,如果您使用.NET的XML操作方法构造它,并将其写入
字符串
,则
指令可能会引用
utf-16
编码。这是因为.NET的字符串使用两个字节字符。因此,在处理XML时,最好使用.NET的本机方法将XML序列化为文本输出(参见示例)。只有这样,才能确保在指令中正确指定编码。

当您阅读本手册时,其内容如下:

将长度前缀字符串写入此流

所以“不适当”字符实际上是字符串的长度

您应该使用基于的编写器(例如)或任何其他可用的方法来输出文本文件


此外,您还应注意文本的编码具体地说,当您试图输出XML时,如果您使用.NET的XML操作方法构造它,并将其写入
字符串
,则
指令可能会引用
utf-16
编码。这是因为.NET的字符串使用两个字节字符。因此,在处理XML时,最好使用.NET的本机方法将XML序列化为文本输出(参见示例)。只有这样,编码才会在
指令中正确指定。

这是因为
BinaryWriter
将写入字符串的长度(作为int)添加到前面

  public static void CreateFile(string xml)
    {
        var dateStamp = DateTime.Now.ToString("yyyy-MM-dd");
        var fileName = "file_" + dateStamp + ".xml";
        if (File.Exists(fileName))
        {
            Console.WriteLine("File already exists.");
            return;
        }

        using (FileStream fileStream = new FileStream(fileName, FileMode.CreateNew))
        {
            using (StreamWriter writer = new StreamWriter(fileStream))
            {
                writer.Write(xml);
            }
        }
    }

这是因为
BinaryWriter
在前面添加了写入字符串的长度(如int)

  public static void CreateFile(string xml)
    {
        var dateStamp = DateTime.Now.ToString("yyyy-MM-dd");
        var fileName = "file_" + dateStamp + ".xml";
        if (File.Exists(fileName))
        {
            Console.WriteLine("File already exists.");
            return;
        }

        using (FileStream fileStream = new FileStream(fileName, FileMode.CreateNew))
        {
            using (StreamWriter writer = new StreamWriter(fileStream))
            {
                writer.Write(xml);
            }
        }
    }

如果使用
二进制编写器
,则会发生这种情况。如果将其更改为
StreamWriter
,则此问题将消失。

如果使用
BinaryWriter
,则会发生此情况。如果将其更改为
StreamWriter
这个问题就会消失。

为什么要使用BinaryWriter?这就是本教程中的内容。将其更改为StreamWriter修复了它。谢谢把它放在下面的答案里,我来核对一下。你为什么要使用二进制编写器?这就是教程中的内容。将其更改为StreamWriter修复了它。谢谢把答案写在这里,我来核对一下。