Plusieurs programmes utilisent la même extension de fichier, mais les formats sont totalement différents et incompatibles. Par exemple, j'ai des .sch
fichiers sur mon ordinateur qui sont dans au moins 5 formats différents (TINA, PSpice, PADS, Protel et Eagle). Existe-t-il un moyen pour que Windows les traite différemment, de sorte qu'un double-clic sur un tel fichier l'ouvre dans le programme dans lequel il doit être ouvert?
Linux utilise des nombres magiques dans les fichiers eux-mêmes pour se différencier, et utilise uniquement les extensions de fichier comme plan de secours. (Tous les fichiers PNG commencent par les octets 89 50 4E 47 0D 0A 1A 0A
, par exemple, quel que soit le nom que vous leur donnez.) Ce serait bien si Windows pouvait prendre en charge cela, mais probablement très difficile à implémenter. Peut-être quelque chose de plus simple comme une extension de deuxième niveau, comme filename.program1.sch
et filename.program2.sch
? Peut-être une sorte de filtre qui renomme les fichiers à la volée?
Meilleure idée: associer l'extension ambiguë à un préprocesseur (fichier .bat ou application dédiée) qui recherche une extension de deuxième niveau ou va dans le fichier lui-même et recherche le nombre magique, puis lance le programme approprié?
Réponses:
Windows ne lance pas de fichiers basés sur des informations contenues dans le fichier - la création d'une base de données pour cela prendrait une quantité incroyable de travail et de programmation. La seule véritable façon d'identifier un fichier est par les signatures binaires dans le fichier, si le fichier le possède même, et c'est à l'auteur du logiciel de le mettre en œuvre.
Sous Windows, les fichiers sont transmis au programme que vous spécifiez pour une extension de fichier particulière. Windows détermine l'extension d'un fichier comme la sous-chaîne qui suit la dernière occurrence d'un point, il n'est donc pas possible avec les noms de fichiers que vous avez publiés.
Vous devez soit renommer les fichiers (et leur donner des extensions de fichier uniques), soit écrire un fichier batch pour lancer l'application appropriée pour vous. Pour plus de détails, consultez cet article Technet .
la source
Je l'ai résolu moi-même:
J'ai créé un script Python qui lit les premiers octets d'un fichier et les compare à un dictionnaire, puis lance le programme approprié en fonction des nombres magiques.
La dernière version sera ici: Lancez des fichiers ambigus dans le programme approprié
J'ai essayé d'associer l'extension de fichier à ce script, mais Windows 7 ne me l'a pas permis. Il l'a simplement associé à Python à la place, alors je suis allé dans le registre et j'ai ajouté le nom du script manuellement.
Peut être amélioré, mais cela fonctionne. Je peux double-cliquer sur différents fichiers avec la même extension .sch et ils s'ouvrent dans différentes applications.
Mise à jour: je l'ai converti en .exe en utilisant cx_freeze, avec un fichier de configuration YAML externe, et il est facile à associer. Voir aussi cette proposition libmagique . Je ne sais pas si je devrais en faire un "lanceur libmagic à part entière pour Windows" ou s'il est préférable de gérer une seule extension de fichier avec un .exe et un simple fichier YAML.
la source
Pour commencer, vous pouvez renommer l'un des types de fichiers pour avoir une nouvelle extension et utiliser la boîte de dialogue "Ouvrir avec" pour définir un programme par défaut pour ouvrir ces types de fichiers.
Cela ne résout cependant pas le problème de changement de nom. Mais vous simplifiez les choses en créant un dossier spécifique où vous placez tous les fichiers de l'un des programmes. Ensuite, vous pouvez écrire un script pour renommer automatiquement les fichiers de ce dossier en votre nouvelle extension de fichier.
Vous pouvez avoir des problèmes avec une boîte de dialogue "Ouvrir un fichier" dans votre programme, selon la façon dont il est configuré. Mais si vous avez un seul dossier où se trouvent tous vos fichiers, vous devriez pouvoir simplement l'utiliser.
Une façon plus compliquée, mais potentiellement meilleure, serait de créer un programme proxy. Conservez toutes les extensions de fichier, mais faites-les ouvrir par le programme proxy. Demandez à votre programme d'examiner le binaire et de choisir de quel type de fichier il s'agit et de quel programme démarrer. Cela vous obligera à consacrer un certain temps à la rédaction de votre programme, qui peut ou non valoir la peine pour vous.
la source
Microsoft Visual Studio implémente votre dernière idée. Lorsque vous lancez un fichier .sln, un petit talon vérifie le numéro de version de la solution et lance la version correcte de Visual Studio (si plusieurs versions sont installées).
Bien sûr, la coordination ici est un peu plus facile car (A) le format de fichier est conçu pour cela et (B) ce sont toutes des versions du même logiciel, du même fabricant.
la source
Une solution rapide consiste à ajouter des entrées de contexte supplémentaires au menu contextuel de l'explorateur. Ou pour utiliser l'entrée de contexte «Ouvrir avec». Le premier est plus confortable car on peut ajouter des paramètres d'appel et spécifier des noms «révélateurs». Il permet également d'ouvrir un fichier avec différentes versions du même programme (s'il est installé en parallèle).
Bien sûr, cette approche n'est pas automatique. Il faut connaître la bonne application. Mais pour les types de fichiers où la détection basée sur la base de données échouerait (par exemple les fichiers texte ou autres fichiers sans "nombre magique"), vous avez toujours le choix.
BTW: le système d'exploitation moins connu `` GEOS '' (qui était un concurrent de Win3 à son époque et loin devant) avait un en-tête de 256 octets fixe pour tous les fichiers où l'application de création, l'icône et les avis de droit d'auteur étaient stockés (avec un champ libre pour propres notes). Comme cela faisait partie du fichier et non du système de fichiers ou d'un dictionnaire de système d'exploitation, il était transparent lorsque les fichiers étaient déplacés sur des systèmes de fichiers ou même vers un autre système d'exploitation (il y avait une extension d'exploration pour W95).
la source