我正在关注微软关于创建和编写简单文件的教程,我得到了意想不到的结果。
http://msdn.microsoft.com/en-us/library/36b93480%28v=vs.110%29.aspx
我实际上是在将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);
}
}
}
答案 0 :(得分:4)
当您阅读BinaryWriter.Write(string)
的手册时,它会显示:
将一个以长度为前缀的字符串写入此流...
所以“不恰当”字符实际上是字符串的长度。
您应该使用基于TextWriter
的编写器(例如StreamWriter
)或任何其他可用的方法来输出文本文件。
此外,您应该注意文本的编码。 具体来说,当您尝试输出XML 时,如果您使用.NET的XML操作方法构建它,并将其写入string
,那么<?xml?>
指令可能会引用utf-16
编码。这是因为.NET的字符串使用双字节字符。因此,在处理XML时,使用.NET的 native 方法将XML 序列化为文本输出总是更好(参见例如XmlWriter
)。只有这样才能在<?xml?>
指令中正确指定编码。
答案 1 :(得分:2)
那是因为你使用BinaryWriter
将数据写入文件。它将以稍后可以读取的方式编写字符串,因此它将首先将字符串长度写入文件,然后写入字符串数据。
只需将文件写为文本文件即可。您可以使用StreamWriter
,或者只使用打开的File
类中的一个静态帮助器方法,为您写入和关闭文件:
File.WriteAllText(fileName, xml);
答案 2 :(得分:1)
这是因为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);
}
}
}
答案 3 :(得分:1)
如果您使用BinaryWriter
,就会发生这种情况。如果将其更改为StreamWriter
,则此问题就会消失。