【发布时间】:2017-02-06 14:06:55
【问题描述】:
我正在序列化一个(Car 类的)对象并将其保存为 xml 文件。但是有时(非常罕见的事件,我无法复制它)我得到一个只包含空字符(ASCII 代码为 0 的字符)的文件,即使文件大小是正确的。
public void SaveCar(Car car)
{
var serializer = new XmlSerializer(typeof(Car));
using (var stream = new MemoryStream())
{
serializer.Serialize(stream, car);
byte[] binaryCar = stream.ToArray();
FileHelper.WriteAllBytes(@"C:\car.xml", binaryCar);
}
}
FileHelper.WriteAllBytes 与 System.IO.File.WriteAllBytes 相同,只是如果父目录不存在则创建父目录。
public static class FileHelper
{
public static void WriteAllBytes(string path, byte[] bytes)
{
CreateParentDirectoryForPathIfDoesntExist(path);
File.WriteAllBytes(path, bytes);
}
public static void CreateParentDirectoryForPathIfDoesntExist(string filePath)
{
var file = new FileInfo(filePath);
if (file.Exists)
{
return;
}
if (file.Directory != null && !file.Directory.Exists)
{
Directory.CreateDirectory(file.Directory.FullName);
}
}
}
知道是什么原因造成的吗?编码问题?
【问题讨论】:
-
“有时”是什么时候?对于特定文件?特定的车? minimal reproducible example 能够可靠地演示使用
NUL字符创建文件会很有用。 -
更具体地了解
FileHelper。这看起来像是候选问题的来源。 -
在你的问题中包含
FileHelper的代码。 -
对不起,我澄清了一点,并添加了 FileHelper 类。问题是我无法复制它(我不知道什么样的数据会导致它在数据丢失时表现得像那样)。它很少发生,甚至在我的电脑上也没有。大多数时候它工作得很好。
标签: c# xml serialization stream corrupt-data