gpt4 book ai didi

c# - Datacontractserializer 不会覆盖所有数据

转载 作者:太空宇宙 更新时间:2023-11-03 18:45:36 25 4
gpt4 key购买 nike

我注意到,如果我使用 Datacontractserializer 将对象持久化回文件中,如果新 xml 的长度比文件中最初存在的 xml 短,则原始 xml 的剩余部分会超过新 xml 的长度将保留在文件中并将破坏 xml。

有没有人有好的解决方案来解决这个问题?

这是我用来持久化对象的代码:

    /// <summary>
/// Flushes the current instance of the given type to the datastore.
/// </summary>
private void Flush()
{
try
{
string directory = Path.GetDirectoryName(this.fileName);
if (!Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}

FileStream stream = null;
try
{
stream = new FileStream(this.fileName, FileMode.OpenOrCreate);
for (int i = 0; i < 3; i++)
{
try
{
using (XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(stream, new System.Text.UTF8Encoding(false)))
{
stream = null;

// The serializer is initialized upstream.
this.serializer.WriteObject(writer, this.objectValue);
}

break;
}
catch (IOException)
{
Thread.Sleep(200);
}
}
}
finally
{
if (stream != null)
{
stream.Dispose();
}
}
}
catch
{
// TODO: Localize this
throw;
//throw new IOException(String.Format(CultureInfo.CurrentCulture, "Unable to save persistable object to file {0}", this.fileName));
}
}

最佳答案

这是因为您打开流的方式:

stream = new FileStream(this.fileName, FileMode.OpenOrCreate);

尝试使用:

stream = new FileStream(this.fileName, FileMode.Create);

参见 FileMode文档。

关于c# - Datacontractserializer 不会覆盖所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4621640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com