Varios programas usan la misma extensión de archivo, pero los formatos son totalmente diferentes e incompatibles. Por ejemplo, tengo .sch
archivos en mi computadora que están en al menos 5 formatos diferentes (TINA, PSpice, PADS, Protel y Eagle). ¿Hay alguna manera de hacer que Windows los trate de manera diferente, de modo que al hacer doble clic en dicho archivo se abra en el programa en el que está destinado a abrirse?
Linux usa números mágicos en los propios archivos para diferenciar, y solo usa extensiones de archivos como un plan alternativo. (Todos los archivos PNG comienzan con los bytes 89 50 4E 47 0D 0A 1A 0A
, por ejemplo, independientemente de cómo los nombre). Sería bueno si Windows pudiera admitir esto, pero probablemente sea muy difícil de implementar. ¿Quizás algo más simple como una extensión de segundo nivel, como filename.program1.sch
y filename.program2.sch
? ¿Quizás algún tipo de filtro que cambie el nombre de los archivos sobre la marcha?
Mejor idea: ¿asociar la extensión ambigua con un preprocesador (archivo .bat o aplicación dedicada) que verifica si hay una extensión de segundo nivel o va al archivo mismo y busca el número mágico y luego lanza el programa apropiado?
fuente
Respuestas:
Windows no inicia archivos basados en ninguna información del archivo; crear una base de datos para eso requeriría una increíble cantidad de trabajo y programación. La única forma verdadera de identificar un archivo es mediante las firmas binarias en el archivo, si el archivo lo tiene, y esto depende del autor del software implementarlo.
En Windows, los archivos se pasan al programa que especifique para una extensión de archivo en particular. Windows determina la extensión de un archivo como la subcadena que sigue a la última aparición de un período, por lo que no es posible con los nombres de archivo que publicó.
Debe cambiar el nombre de los archivos (y darles extensiones de archivo únicas) o escribir un archivo por lotes para iniciar la aplicación adecuada para usted. Para más detalles, vea este artículo de Technet .
fuente
Lo resolví yo mismo:
Hice un script de Python que lee los primeros bytes de un archivo y los compara con un diccionario, luego lanza el programa apropiado basado en los números mágicos.
La última versión estará aquí: inicie archivos ambiguos en el programa apropiado
Traté de asociar la extensión del archivo con este script, pero Windows 7 no me lo permitió. Simplemente lo asoció con Python, así que entré en el registro y agregué el nombre del script manualmente.
Espacio para mejorar, pero funciona. Puedo hacer doble clic en diferentes archivos con la misma extensión .sch y se abren en diferentes aplicaciones.
Actualización: lo he convertido a un .exe usando cx_freeze, con un archivo de configuración externo YAML, y es fácil de asociar. Ver también esta propuesta de libmagic . No estoy seguro de si debería convertir esto en un completo "lanzador de libmagic para Windows" o si es mejor manejar solo una extensión de archivo con un .exe y un simple archivo YAML.
fuente
Para comenzar, puede cambiar el nombre de uno de los tipos de archivos para que tenga una nueva extensión, y usar el diálogo "abrir con" para configurar un programa predeterminado para abrir esos tipos de archivos.
Sin embargo, esto no se ocupa del problema de cambio de nombre. Pero simplifica las cosas creando una carpeta específica donde coloca todos los archivos de uno de los programas. Luego, puede escribir una secuencia de comandos para cambiar automáticamente el nombre de los archivos de esa carpeta a su nueva extensión de archivo.
Es posible que tenga problemas con el diálogo "Abrir archivo" en su programa, dependiendo de cómo esté configurado. Pero si tiene una sola carpeta donde están todos sus archivos, debería poder usarla.
Una forma más complicada, pero potencialmente mejor, sería crear un programa proxy. Mantenga todas las extensiones de archivo, pero haga que el programa proxy las abra. Haga que su programa examine el binario y elija qué tipo de archivo es y qué programa iniciar. Esto requerirá que pase algún tiempo escribiendo su programa, que puede o no valer la pena para usted.
fuente
Microsoft Visual Studio implementa su última idea. Cuando inicia un archivo .sln, un pequeño trozo comprueba el número de versión de la solución y lanza la versión correcta de Visual Studio (si tiene varias versiones instaladas).
Por supuesto, la coordinación aquí es un poco más fácil ya que (A) el formato de archivo está diseñado para esto y (B) todas son versiones del mismo software, del mismo fabricante.
fuente
Una solución rápida es agregar entradas de contexto adicionales al menú contextual del explorador. O para usar la entrada de contexto 'abrir con'. El primero es más cómodo, ya que se pueden agregar parámetros de llamada y especificar nombres 'reveladores'. También permite abrir un archivo con diferentes versiones del mismo programa (si está instalado en paralelo).
Por supuesto, este enfoque no es automático. Uno tiene que saber la aplicación adecuada. Pero para los tipos de archivos donde la detección basada en la base de datos fallará (por ejemplo, archivos de texto u otros archivos sin un "número mágico"), siempre tiene la opción.
Por cierto: el sistema operativo menos conocido 'GEOS' (que era un competidor Win3 en su momento y mucho más adelante) tenía un encabezado fijo de 256 bytes para todos los archivos donde se almacenaba la aplicación de creación, el icono y los avisos de derechos de autor (junto con un campo libre para notas propias). Como esto era parte del archivo y no el sistema de archivos o un diccionario del sistema operativo, era transparente cuando los archivos se movían a través de sistemas de archivos o incluso a un sistema operativo diferente (había una extensión de explorador para W95).
fuente