Как файлы настроек становятся поврежденными?

10

Я прочитал несколько различных статей по устранению неполадок и вопросов и ответов, где виновником является поврежденный файл настроек для приложения или процесса. Как правило, решение состоит в том, чтобы удалить файл неправильных настроек и позволить новому файлу настроек по умолчанию появляться при перезапуске любого программного обеспечения, которое неправильно работало.

Как файл настроек становится поврежденным? Это просто ошибка чтения / записи низкого уровня или в некоторых случаях возникает ошибка более высокого уровня? Это просто неверный или ошибочный XML?

Я думаю, что plutilможет сказать вам, если есть синтаксическая ошибка с файлом, но опять же, как эта ошибка была введена? Мне неясно, каков обычный источник этих поврежденных файлов. Спасибо.

WXS
источник

Ответы:

6

Это может быть вызвано множеством причин, но я считаю, что наиболее распространенной причиной является то, куда записывается файл, и приложение завершает работу до того, как завершит запись файла. Это может быть вызвано тем, что системные издержки слишком велики для успешной записи.

Аппаратные ошибки на жестком диске или в памяти также могут привести к ошибкам в данных, но я думаю, что к этому времени это будет наименьшей из ваших проблем.

AlanJC
источник
4
Я скептически Если это когда-либо имеет место, приложение должно быть написано очень плохо, так как требуется всего 2 дополнительных слова, чтобы избежать этой очевидной ошибки. Пример кода Apple для написания списков рассылки использует метод -writeToFile:atomically:YES(«данные записываются в файл резервной копии, а затем, при условии отсутствия ошибок, файл резервной копии переименовывается в указанное имя»). Функция POSIX rename()гарантирует, что файл будет существовать «даже в случае сбоя системы в середине операции».
Кен
3

Могу поспорить, что почти в каждом случае нет ничего синтаксически неправильного в файле plist. Функции Apple по загрузке и сохранению данных plist привлекают большое внимание и широкое использование. Почти каждая ошибка наверняка найдена и исправлена.

(Учтите, что списки используются для всех видов вещей, таких как drag-n-drop и буфер обмена, разрешения для песочницы для запуска приложений, пользовательские интерфейсы для каждого приложения и даже какой значок отображать в Finder. Было бы невероятно, если бы в коде написания списков ошибок произошла ошибка, из-за которой испортились файлы настроек для некоторых приложений, но не для всех остальных!)

Файл настроек приложения (plist) просто хранит некоторые из его структур данных в памяти на диске. Поэтому, если в приложении есть ошибка, из-за которой что-то устанавливается неправильно, оно сохраняется.

Часто, когда приложение начинает плохо себя вести, вы можете просто закрыть его и перезапустить. Это сбрасывает многие его части и может решить проблему. Файлы настроек перезагружаются с диска, поэтому, если уязвимая часть приложения была сохранена в постоянном предпочтении, перезапуск приложения не окажет никакого влияния: неверное значение просто загрузится снова. Вот когда удаление файла настроек может помочь. Это как перезапуск приложения, но для вещей, которые были сохранены.

Это может произойти, потому что программисты предполагают, что данные их приложения верны. Если цвет может быть выбран только пользователем, щелкающим по стандартному элементу управления цветовым колесом, он, вероятно, не выполняет никакой дополнительной работы, чтобы проверить его правильность перед использованием. (Для сравнения, такое приложение, как Safari, выполняет кучу дополнительной работы, проверяя все, потому что оно загружает и запускает файлы прямо из Интернета.)

Плюс в том, что это почти всегда правильно, и гораздо проще, если вы предполагаете, что внутренние значения верны. Недостатком является то, что если какое-то плохое значение просачивается как-то (как пользователь сделал что-то совершенно неожиданное), все может пойти не так, пока все не будет сброшено.

кругозор
источник
Это интересно. Вы говорите, что проблема, как правило, специфична для приложения и связана с ошибкой или недосмотром, которые позволяют устанавливать и проверять неверные значения перед последующим использованием, а не с чтением / записью или общей обработкой plist. Мне все еще кажется странным, что такая обычная (и официальная) проблема, как у Dock ( apple.stackexchange.com/questions/33950/… ), может иметь проблемы, хотя, возможно, это исключение и действительно ошибка чтения / записи.
wxs
Walker: Если у кого-то есть один из этих поврежденных файлов Dock plist, это легко проверить. Мои деньги все еще на ошибке в приложении (Системные настройки или Док), а не на коде plist.
Кен
1

Будучи опытным пожилым гражданином, я обнаружил, что мой файл настроек iTunes поврежден, и лицензионное соглашение появлялось каждый раз, когда я открывал iTunes. Плюс все мои предпочтения пришлось сбросить. Я полагаю, что приведенные выше ответы верны, так как незадолго до того, как у меня возникла эта проблема, я был вынужден сделать принудительное выключение моего компьютера (проблемы с электричеством в этом районе) и несколько раз перезагрузиться / наполовину перезагрузиться. Заявки были прекращены до того, как инструкции / письмо было завершено. Но исправление для создания нового файла настроек iTunes было показано в сети и его очень легко сделать. Это решило проблему.

Боб Фосс
источник