Иногда мы получаем отчеты о поврежденных файлах от клиентов. Они редки и практически невозможно воспроизвести. Когда мы выполняем удаленный вход в систему клиентов, мы обнаруживаем, что файл (обычно INI-файл) открыть нельзя. Также файл не может быть скопирован локально для анализа. Исходя из ограниченного числа примеров, эти поврежденные файлы имеют размер "0 КБ" и могут быть удалены только. Когда это происходит, похоже, что он влияет только на один INI-файл из десятков. В остальном система в порядке. После восстановления поврежденного файла система полностью восстанавливается.
Мы не знаем, как это происходит, и хотели бы воспроизвести и, надеюсь, решить проблему. Это может быть проблема Windows, ошибка кодирования, даже аппаратная проблема, связанная с неожиданным выключением компьютера. В целях тестирования я создал TXT-файл со случайным мусором, как в:
// 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;
Это создает красиво искаженный файл, первые несколько байтов были: NREâA # »Bâ ÷ lÁb… ilL('- ØÏD YL & d .... Но файл все еще открывается в Notepad++ и нескольких других редакторах ASCII, которые я пробовал.
Можно ли создать в Windows действительно "поврежденный" файл, который Windows отказывается открывать? Возможно, это связано с работой с таблицей размещения файлов, но я сомневаюсь, что пользователи имеют какой-либо доступ к FAT (и в любом случае это не кажется безопасным).