J'ai remarqué que si je restais un objet dans le fichier en utilisant un Datacontrerserializer, si la longueur du nouveau xml est plus courte que le xml présent dans le fichier les restes du xml d'origine hors la longueur du nouveau xml restera dans le fichier et va casser le xml.Datacontractserializer n'écrase pas toutes les données
Quelqu'un at-il une bonne solution pour résoudre ce problème?
Voici le code que je utilise persister l'objet:
/// <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));
}
}
À la votre! Cela semble l'avoir réparé. J'ai été en proie à cela pendant les deux derniers jours. Je n'ai pas regardé assez attentivement les options FileMode. –