Un petit intermède technique qui pourrait aider d'autres développeurs. Sur macOs et depuis les débuts du système les fichiers sont bicéphales, ils contiennent deux forks : le data fork et le ressource fork. Les applications peuvent accéder en lecture et écriture de manière indépendante sur l'un ou l'autre fork Ce principe devient peu à peu obsolète, le seul éditeur de ressource fork efficace est Resedit un utilitaire propriétaire Apple. Il n'a jamais été porté sous macOS X mais il continue de fonctionner sous macOS 9 via SheepShaver. Avec l'abandon de la couche Carbon qui assurait la compatibilité avec macOS 9 disparait également le kit d'accès en lecture et écriture au ressource fork. C'est bien beau de décider unilatéralement de ce qui doit perdurer ou pas, mais sur le terrain, les développeurs, eux, ont des besoins réels, pas métaphysiques. Donc Apple a mis en place un patch horrible, pour accéder au ressource fork il faudra ajouter "/../namedfork/rsrc" au nom du fichier. Argh ! La rustine ! Donc si je veux accéder au ressource fork du fichier harmony.rsrc je vais écrire fopen("harmony.rsr/../namedfork/rsrc","rb"); L'élégance à l'état brut... Mais c'est la que vient l'astuce, ceci ne fonctionne pas si l'on essaie de créer le fichier, il faut d'abord créer le fichier sans ressource fork puis l'ouvrir en écriture avec le ressource fork. Donc l'ouverture devient : // Ouverture du data fork en écriture f=fopen(name,"wb"); if(f) { // Le fichier est cree : fermeture du data fork fclose(f); // Ouverture du ressource fork en écriture strcat(name,"/../namedfork/rsrc"); f=fopen(name,"wb"); } |