Сохраненные файлы иногда содержат только NUL-символы

В нашем приложении Windows 8.1 (WinRT) есть проблема, которая иногда приводит к повреждению сохраненного файла. Файлы имеют правильный размер файла, но файл содержит только NUL-символы. Файл должен содержать сериализованный объект в виде XML.

В попытке найти проблему, мы не перезаписываем файл, мы делаем следующее:

Сериализует текущий объект во временный файл.Проверьте содержимое временного файлаСкопируйте текущий файл (в .timestamp.xml.bak)Переместить / заменить временный файл в текущий файл

В большинстве случаев все это работает нормально, но иногда .timestamp.xml.bak-файл и файл содержимого повреждаются. Кроме того, файл журнала также поврежден (также только NUL-символы). Весь файл состоит из NUL-символов. Когда я смотрю на след bak-файлов и основной файл, я вижу, что основной файл увеличивается в размере. Это должно быть правильно, потому что добавлен новый XML-элемент. Но он не содержит XML.

Я понятия не имею, как и почему это происходит. Это происходит примерно в 5% файлов, которые должны быть отредактированы, и каждый поврежденный файл происходит после 5-20 попыток сохранения. Так же бывает на нескольких планшетах.

Вот фрагмент кода, который создает поврежденные файлы:

StorageFile file = await lDataFld.CreateFileAsync(filename + ".tmp",  CreationCollisionOption.OpenIfExists);

StorageFile oldFile = await dataFld.GetFileAsync(filename + ".xml");
if (oldFile != null)
{
await oldFile.CopyAsync(dataFld, string.Format("{0}.{1}.xml.bak", filename, DateTime.Now.ToString("yyyyMMddHHmmssfffffff")), NameCollisionOption.ReplaceExisting);
}
await file.MoveAndReplaceAsync(await dataFld.GetFileAsync(filename + ".xml"));

Logger.Log(string.Format("Saved {0}.", filename));

Может кто-нибудь сказать мне, как мы получаем файлы, содержащие только NUL-символы, и как / почему это происходит? И даже лучше, как это можно исправить.

Небольшое замечание: мы никак не можем воспроизвести эту проблему, она возникает только в нашей производственной среде.

Ответы на вопрос(1)

Ваш ответ на вопрос