Создать поврежденный файл TXT или INI?
Иногда мы получаем отчеты о поврежденных файлах от клиентов. Они редки и практически невозможно воспроизвести. Когда мы выполняем удаленный вход в систему клиентов, мы обнаруживаем, что файл (обычно 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 (и в любом случае это не кажется безопасным).
1 ответ
Причина, по которой файл не может быть открыт, не в том, что файл поврежден, а в том, что в нем есть блокировка записи.
Это означает, что сетевое соединение было разорвано, когда файл был открыт, и сервер сохраняет блокировку активной.
Если вы откроете Computer Management
на сервере и откройте окно "Открыть файлы", вы должны найти ссылки на эти INI-файлы с возможностью снять блокировку, после чего вы сможете снова сделать что-нибудь для файла.
Чтобы воссоздать такое обстоятельство, создайте файл или откройте существующий файл. Написать в файл. При этом отключите компьютер от сети, а затем снова подключите. Файл будет поврежден и не может быть открыт аналогично тому, как вы видели ранее.
Теперь выясните причину, по которой сеть отключается. Например, при работе с групповыми политиками обратите внимание, что групповые политики обновляются примерно каждые 90 минут. Если вы установите замену общего ресурса, он удалит общий ресурс и будет воссоздавать его каждые 90 минут с случайным интервалом в несколько минут. Если в это время вы выполняете запись в файл, он может быть поврежден.