Isso realmente soa como um bug no TextPad - Eu não consigo pensar em nada que o VirtualBox estaria fazendo que faria com que ele se comportasse dessa maneira. A forma como as pastas compartilhadas funcionam, basicamente mapeia uma unidade de rede falsa para o seu convidado do Windows 7. Se foi o VirtualBox introduzindo o comportamento estranho, você deve ver isso manifestado em todos os outros aplicativos.
Eu tenho visto vários programas se comportarem mal ao salvar arquivos antes, principalmente em como basicamente sobrescrevem o conteúdo do arquivo existente sem realmente redefinir o comprimento do arquivo, ou zerar os bytes no final. O que isto significa é que se você "encurta" o seu arquivo removendo alguns caracteres ou linhas, você obtém o comportamento exato descrito acima. Você certamente poderia realizar alguns testes para realmente descobrir a origem do problema, e usar isso para fazer os autores corrigirem os erros:
- Você pode replicar o comportamento usando Salvar como, em vez de apenas Salvar?
- Você pode replicar o comportamento tornando o arquivo mais curto? mais tempo?
- Você pode replicar o comportamento em outras unidades de rede? ou apenas recursos de Pastas Compartilhadas?
- Algum outro "filtro" pode afetar a operação de salvamento, por exemplo, anti-vírus, etapas de pós-compilação, controle de origem, etc.
Como demonstração, usando o PowerShell - aqui está como você pode replicar o mesmo comportamento que está vendo. Comecei tomando o parágrafo de abertura de Um conto de duas cidades e salvando-o como tale.txt
$text = gc tale.txt
$fs = [System.IO.File]::OpenWrite("tale.txt")
$sw = New-Object System.IO.StreamWriter($fs)
$sw.Write($text.Replace("the",""))
$sw.Dispose()
Você pode ver que todas as 15 instâncias de "the" palavras foram substituídas pela string vazia como pretendido, com a conseqüência não intencional dos últimos 45 bytes do arquivo original restante, repetindo assim a frase " no grau de comparação superlativo apenas. "duas vezes no final do arquivo - semelhante à situação descrita acima.
Para completar, a solução simples para o exemplo de código incorreto acima é não usar o método OpenWrite e, em vez disso, chamar o método estático WriteAllText na classe File.