Crie um arquivo TXT ou INI corrompido?

0

Ocasionalmente, recebemos relatórios de arquivos corrompidos de clientes. Estes são raros e quase impossíveis de reproduzir. Quando entramos na máquina do cliente remotamente, descobrimos que o arquivo (geralmente um arquivo INI) não pode ser aberto. Nem o arquivo 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 de dezenas. O resto do sistema está bem. Depois que o arquivo corrompido é recriado, o sistema se recupera totalmente.

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, até mesmo um problema de hardware relacionado à desativação inesperada 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 mutilado, os primeiros bytes foram: NREâA # »BÁlÁb… ilL ('- ØÏD YL & d… Mas o arquivo ainda é aberto no Notepad ++ e alguns outros editores ASCII I tentou.

É possível criar um arquivo genuinamente "corrupto" no Windows, que o Windows se recuse a abrir? Isso possivelmente envolve mexer na tabela de alocação de arquivos, mas duvido que os usuários tenham acesso ao FAT (e não parece seguro fazer isso de qualquer maneira).

    
por AlainD 19.09.2017 / 11:00

1 resposta

0

A razão pela qual um arquivo não pode ser aberto não é porque o arquivo está corrompido, mas porque há um bloqueio de gravação no arquivo.

Isso significa que a conexão de rede foi cortada quando o arquivo estava aberto e o servidor está mantendo o bloqueio ativo.

Se você abrir Computer Management no servidor e unvold para Open Files, deverá encontrar referências a esses arquivos .ini, com a capacidade de remover o bloqueio, após o qual você poderá fazer qualquer coisa no arquivo novamente.

Para recriar tal circunstância, crie um arquivo ou abra um arquivo existente. Escreva no arquivo. Ao fazer isso, desconecte o seu PC da rede e, em seguida, reconecte-o. O arquivo será corrompido e não poderá ser aberto de maneira semelhante à anterior.

Agora, descubra o motivo pelo qual a rede se desconecta. Por exemplo, ao trabalhar com Diretivas de Grupo, observe que as diretivas de grupo são atualizadas a cada 90 minutos. Se você definir o compartilhamento para substituir, ele excluirá o compartilhamento e o recriará a cada 90 minutos com alguns minutos de intervalo aleatório. Se você estiver gravando em um arquivo nesse momento, o arquivo poderá ficar corrompido.

    
por 19.09.2017 / 11:10