Ocasionalmente, recebemos relatórios de arquivos corrompidos dos clientes. Estes são raros e quase impossíveis de reproduzir. Quando entramos na máquina dos clientes remotamente, descobrimos que o arquivo (geralmente um arquivo INI) não pode ser aberto. O arquivo também não pode ser copiado localmente para análise. Com base em exemplos limitados, esses arquivos corrompidos têm um tamanho de "0kB" e só podem ser excluídos. Quando isso ocorre, parece afetar apenas um arquivo INI entre dezenas. O resto do sistema está bem. Depois que o arquivo corrompido é recriado, o sistema se recupera completamente.
Não sabemos como isso acontece e gostaríamos de reproduzir e, esperamos, resolver o problema. Pode ser um problema do Windows, um erro de codificação e até mesmo um problema de hardware relacionado ao desligamento inesperado da máquina. Para fins de teste, criei um arquivo TXT com lixo aleatório, como em:
// Delphi code, but applies to any language
procedure TfrmDiagnostics.CreateCorruptFile();
var
fpDump: TextFile;
nChar: Integer;
begin
RandSeed := (GetTickCount() mod 23);
AssignFile(fpDump, 'C:\Corrupted.txt');
for nChar:=1 to 100 do
Write(fpDump, Chr(Random(250)));
Flush(fpDump);
CloseFile(fpDump);
end;
Isso gera um arquivo bem confundido, os primeiros bytes foram: NREAA # »BÁLÁb… ilL ('- ØD YL & d .... Mas o arquivo ainda é aberto no Notepad ++ e em alguns outros editores ASCII que tentei.
É possível criar um arquivo genuinamente "corrompido" no Windows, que o Windows se recusa a abrir? Isso possivelmente envolve mexer com a tabela de alocação de arquivos, mas duvido que os usuários tenham acesso ao FAT (e não parece uma coisa segura a se fazer).