Сохраненные файлы иногда содержат только 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-символы, и как / почему это происходит? И даже лучше, как это можно исправить.
Небольшое замечание: мы никак не можем воспроизвести эту проблему, она возникает только в нашей производственной среде.