Comment les fichiers de préférences sont-ils corrompus?


10

J'ai lu différents articles de dépannage et questions / réponses où le coupable est un fichier de préférences corrompu pour une application ou un processus. En règle générale, la solution consiste à supprimer le fichier de préférences incorrectes et à permettre la création d'un nouveau fichier de préférences par défaut lors du redémarrage du logiciel qui se comporte mal.

Comment un fichier de préférences est-il corrompu? S'agit-il simplement d'une erreur de lecture / écriture de bas niveau, ou y a-t-il une erreur de niveau supérieur se produisant dans certains cas? Est-ce simplement du XML mal formé ou mal orthographié?

Je pense que je plutilpourrais vous dire s'il y a une erreur de syntaxe avec le fichier, mais encore une fois, comment l'erreur a-t-elle été introduite? Je ne suis pas clair sur la source habituelle de ces fichiers corrompus. Merci.

Réponses:


6

Cela peut être dû à un grand nombre de choses, mais je pense que la cause la plus courante est l'endroit où le fichier est en cours d'écriture et l'application se termine avant la fin de l'écriture du fichier. Cela peut être dû au fait que les frais généraux du système sont trop importants pour une écriture réussie à l'époque.

Des erreurs matérielles avec le disque dur ou la mémoire peuvent également provoquer des erreurs de données, mais j'imagine que ce serait le moindre de vos problèmes à ce stade.


4
Je suis sceptique. Si tel est le cas, l'application doit avoir été très mal écrite, car il faut littéralement 2 mots supplémentaires pour éviter ce bug évident. L'exemple de code d'Apple pour écrire un plist utilise la méthode -writeToFile:atomically:YES("les données sont écrites dans un fichier de sauvegarde, puis - en supposant qu'aucune erreur ne se produit - le fichier de sauvegarde est renommé avec le nom spécifié"). La rename()fonction POSIX garantit que le fichier existera "même si le système devait planter au milieu de l'opération".
Ken

3

Je parierais que dans presque tous les cas, il n'y a rien de mal syntaxiquement avec le fichier plist. Les fonctions d'Apple pour le chargement et la sauvegarde des données plist attirent beaucoup l'attention et sont très utilisées. Presque tous les bugs ont sûrement été trouvés et corrigés maintenant.

(Considérez que les plists sont utilisés pour toutes sortes de choses, comme le glisser-déposer et le presse-papiers, les autorisations de bac à sable pour le lancement d'applications, les interfaces utilisateur pour chaque application et même l'icône à afficher dans le Finder. Ce serait incroyable si il y avait un bug dans le code d'écriture de plist qui venait juste de bousiller les fichiers de préférences pour certaines applications, mais pas toutes ces autres choses!)

Le fichier de préférences (plist) d'une application stocke simplement certaines de ses structures de données en mémoire sur le disque. Donc, si l'application a un bogue qui provoque un mauvais réglage, il est enregistré.

Souvent, lorsqu'une application commence à mal se comporter, vous pouvez simplement la quitter et redémarrer. Cela réinitialise de nombreuses parties de celui-ci et peut résoudre le problème. Cependant, les fichiers de préférences sont rechargés à partir du disque, donc si la partie affectée de l'application a été enregistrée dans une préférence persistante, le redémarrage de l'application n'aura aucun impact: la mauvaise valeur sera simplement rechargée. C'est alors que la suppression du fichier de préférences peut aider. C'est comme redémarrer l'application, mais pour les choses qui ont été enregistrées.

Ces choses peuvent se produire car les programmeurs supposent que les données de leur application sont correctes. Si une couleur ne peut être choisie que par l'utilisateur en cliquant sur un contrôle de roue chromatique standard, il ne fait probablement aucun travail supplémentaire pour vérifier qu'elle est correcte avant de l'utiliser. (En comparaison, une application comme Safari fait une tonne de travail supplémentaire pour tout vérifier, car elle charge et exécute des fichiers directement sur Internet.)

L'avantage est que c'est presque toujours correct, et c'est beaucoup plus facile si vous supposez que les valeurs internes sont correctes. L'inconvénient est que si une mauvaise valeur se glisse d'une manière ou d'une autre (comme si l'utilisateur a fait quelque chose de totalement inattendu), les choses peuvent se détraquer jusqu'à ce que tout soit réinitialisé.


C'est intéressant. Vous dites que le problème est généralement spécifique à l'application et a à voir avec un bogue ou une erreur qui permet de définir de mauvaises valeurs et de ne pas les vérifier avant une utilisation ultérieure, pas avec une lecture / écriture ou une gestion générale du plist. Cela me semble toujours aussi étrange que quelque chose d'aussi commun (et officiel) que Dock ( apple.stackexchange.com/questions/33950/… ) ait un problème, bien que ce soit peut-être une exception et une erreur de lecture / écriture.
wxs

walker: Si quelqu'un possède l'un de ces fichiers de plist Dock corrompus, il est facile de le vérifier. Mon argent est toujours sur un bug dans l'application (Préférences Système ou Dock), pas sur le code plist.
Ken

1

En tant que personne âgée à la pointe de la technologie, j'ai trouvé que mon fichier de préférences iTunes était corrompu et j'ai fait en sorte que l'accord de licence apparaisse à chaque fois que j'ouvrais iTunes. De plus, toutes mes préférences ont dû être réinitialisées. Je crois que les réponses ci-dessus sont correctes, car juste avant d'avoir ce problème, j'ai été obligé de faire des arrêts forcés de mon ordinateur (problèmes électriques dans la région) et de redémarrer / demi-redémarrer plusieurs fois. Les candidatures ont pris fin avant la fin des instructions / rédaction. Mais le correctif pour générer un nouveau fichier de préférences iTunes a été montré en ligne et très facile à faire. Cela a résolu le problème.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.