Vários programas usam a mesma extensão de arquivo, mas os formatos são totalmente diferentes e incompatíveis. Por exemplo, eu tenho .sch
arquivos no meu computador que estão em pelo menos 5 formatos diferentes (TINA, PSpice, PADS, Protel e Eagle). Existe uma maneira de fazer com que o Windows os trate de maneira diferente, de modo que clicar duas vezes em um desses arquivos abre o programa no qual ele deve ser aberto?
Usa Linux números mágicos nos próprios arquivos para diferenciar e usar apenas as extensões de arquivos como um plano de fallback. (Todos Arquivos PNG comece com os bytes 89 50 4E 47 0D 0A 1A 0A
, por exemplo, independentemente do que você nomeá-los.) Seria bom se o Windows pudesse suportar isso, mas provavelmente muito difícil de implementar. Talvez algo mais simples como uma extensão de segundo nível, como filename.program1.sch
e filename.program2.sch
? Talvez algum tipo de filtro que renomeie arquivos na hora?
Melhor idéia: associar a extensão ambígua a um pré-processador (arquivo .bat ou aplicativo dedicado) que verifica uma extensão de segundo nível ou que entra no próprio arquivo, verifica o número mágico e inicia o programa apropriado?
fonte
Respostas:
Windows faz não Lançar arquivos baseados em qualquer informação no arquivo - construir um banco de dados para isso levaria uma incrível quantidade de trabalho e programação. A única maneira verdadeira de identificar um arquivo é pelas assinaturas binárias no arquivo, se o arquivo o tiver, e isso depende do autor do software implementar.
No Windows, os arquivos são passados para o programa que você especifica para uma extensão de arquivo específica. O Windows determina a extensão de um arquivo como a subsequência que segue a última ocorrência de um período, portanto, não é possível com os nomes de arquivos que você publicou.
É necessário renomear os arquivos (e fornecer extensões de arquivo exclusivas) ou gravar um arquivo em lotes para iniciar o aplicativo apropriado para você. Para mais detalhes, veja este artigo da Technet .
fonte
Eu resolvi eu mesmo:
Fiz um script em Python que lê os primeiros bytes de um arquivo e compara-os a um dicionário, depois lança o programa apropriado com base nos números mágicos.
A última versão estará aqui: Lançar arquivos ambíguos no programa apropriado
Eu tentei associar a extensão do arquivo com este script, mas o Windows 7 não me deixou. Apenas associou-o ao Python, então entrei no registro e adicionei o nome do script manualmente.
Espaço para melhorias, mas funciona. Eu posso clicar duas vezes em arquivos diferentes com a mesma extensão .sch e eles são abertos em aplicativos diferentes.
Atualizar: Eu converti para um .exe usando cx_freeze, com um arquivo de configuração YAML externo, e é fácil associar. Veja também esta proposta libmagic . Não tenho certeza se eu deveria fazer isso em um "lançador de libmagic para o Windows" de pleno direito ou se é melhor lidar com apenas uma extensão de arquivo com um. Exe e um simples arquivo YAML.
fonte
Para começar, você pode renomear um dos tipos de arquivos para ter uma nova extensão e usar a caixa de diálogo "abrir com" para definir um programa padrão para abrir esses tipos de arquivos.
Isso não resolve o problema de renomeação. Mas você simplifica as coisas fazendo uma pasta específica onde você coloca todos os arquivos de um dos programas. Em seguida, você pode escrever um script para renomear automaticamente os arquivos nessa pasta para a nova extensão de arquivo.
Você pode ter problemas com um diálogo "Abrir Arquivo" em seu programa, dependendo de como ele está configurado. Mas se você tem uma única pasta onde todos os seus arquivos são, você deve ser capaz de usar isso.
Uma maneira mais complicada, mas potencialmente melhor, seria criar um programa de proxy. Mantenha todas as extensões de arquivo, mas faça com que elas sejam abertas pelo programa de proxy. Peça ao seu programa para examinar o binário e escolher o tipo de arquivo e qual programa iniciar. Isso exigirá que você passe algum tempo escrevendo seu programa, o que pode ou não valer a pena para você.
fonte
O Microsoft Visual Studio implementa sua última ideia. Quando você inicia um arquivo .sln, um pequeno stub verifica o número da versão da solução e lança a versão correta do Visual Studio (se você tiver várias versões instaladas).
Obviamente, a coordenação aqui é um pouco mais fácil, já que (A) o formato do arquivo é projetado para isso e (B) são todas versões do mesmo software, do mesmo fabricante.
fonte
Uma solução rápida é adicionar entradas de contexto adicionais ao menu de contexto do explorador. Ou para usar a entrada de contexto 'abrir com'. O primeiro é mais confortável, pois é possível adicionar parâmetros de chamada e especificar nomes "informativos". Também permite abrir um arquivo com diferentes versões do mesmo programa (se instalado em paralelo).
Claro que esta abordagem não é automática. É preciso conhecer a aplicação correta. Mas para tipos de arquivo em que a detecção baseada em banco de dados falharia (por exemplo, arquivos de texto ou outros arquivos sem um "número mágico"), você sempre tem a escolha.
BTW: O SO menos conhecido 'GEOS' (que era um concorrente do Win3 em seu tempo e muito à frente) tinha um cabeçalho fixo de 256 bytes para todos os arquivos onde o aplicativo de criação, ícone de avisos de copyright foram armazenados (juntamente com um campo livre para notas próprias). Como isso fazia parte do arquivo e não do sistema de arquivos ou de um dicionário do sistema operacional, era transparente quando os arquivos eram movidos entre os sistemas de arquivos ou até mesmo para um sistema operacional diferente (havia uma extensão do explorador para o W95).
fonte