Os arquivos salvos em algum momento contêm apenas caracteres NUL

Temos um problema no aplicativo Windows 8.1 (WinRT) que, às vezes, nosso arquivo salvo fica corrompido. Os arquivos têm um tamanho correto, mas o arquivo contém apenas caracteres NUL. O arquivo deve conter um objeto serializado como XML.

Na tentativa de encontrar o problema, não substituímos o arquivo, fazemos o seguinte:

Serialize o objeto atual para um arquivo temporário.Verifique o conteúdo do arquivo temporárioCopie o arquivo atual (para .timestamp.xml.bak)Mover / substituir o arquivo temporário para o arquivo atual

Na maioria das vezes, tudo isso funciona bem, mas às vezes o arquivo .timestamp.xml.bak e o arquivo de conteúdo ficam corrompidos. Além disso, também o arquivo de log fica corrompido (também apenas caracteres NUL). O arquivo inteiro consiste em caracteres NUL. Quando olho para a trilha dos arquivos bak e do arquivo principal, vejo que o arquivo principal aumenta de tamanho. Isso deve estar correto, porque um novo elemento XML é adicionado. Mas não contém XML.

Eu não tenho idéia de como e por que isso acontece. Ocorre em cerca de 5% dos arquivos que devem ser editados e cada arquivo corrompido ocorre após 5-20 tentativas de salvamento. Isso também acontece em vários tablets.

Aqui está um trecho do código que cria os arquivos corrompidos:

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));

Alguém pode me dizer como terminamos com arquivos contendo apenas caracteres NUL e como / por que isso acontece? E ainda melhor como isso pode ser corrigido.

Uma pequena adição: não podemos reproduzir esse problema de forma alguma, ele ocorre apenas em nosso ambiente de produção.

questionAnswers(1)

yourAnswerToTheQuestion