Несколько программ используют одинаковое расширение файла, но форматы совершенно разные и несовместимые. Например, у меня есть .sch
файлы на моем компьютере, которые имеют как минимум 5 различных форматов (TINA, PSpice, PADS, Protel и Eagle). Есть ли способ заставить Windows обрабатывать их по-другому, чтобы двойной щелчок по такому файлу открывал его в программе, в которой он должен быть открыт?
Linux использует магические числа в самих файлах для дифференциации и использует только расширения файлов в качестве запасного плана. (Все PNG-файлы начинаются 89 50 4E 47 0D 0A 1A 0A
, например, с байтов , независимо от того, как вы их называете.) Было бы неплохо, если бы Windows могла это поддерживать, но, вероятно, это очень сложно реализовать. Может быть, что-то попроще, как расширение второго уровня, как filename.program1.sch
и filename.program2.sch
? Может быть, какой-то фильтр, который переименовывает файлы на лету?
Лучшая идея: связать неоднозначное расширение с препроцессором (файл .bat или специальное приложение), который проверяет расширение второго уровня или входит в сам файл и сканирует магическое число, а затем запускает соответствующую программу?
Ответы:
Windows не запускает файлы на основе какой-либо информации в файле - создание базы данных для этого потребует невероятного количества работы и программирования. Единственный верный способ идентифицировать файл - это использовать двоичные сигнатуры в файле, если он есть в файле, и это зависит от автора программного обеспечения.
В Windows файлы передаются в программу, указанную вами для определенного расширения файла. Windows определяет расширение файла как подстроку, которая следует за последним вхождением периода, поэтому это невозможно с именами файлов, которые вы опубликовали.
Вы должны либо переименовать файлы (и дать им уникальные расширения файлов), либо написать командный файл, чтобы запустить соответствующее приложение для вас. Для получения более подробной информации см. Эту статью Technet .
источник
Я решил это сам:
Я создал скрипт Python, который читает первые несколько байтов файла и сравнивает их со словарем, а затем запускает соответствующую программу на основе магических чисел.
Последняя версия будет здесь: запускать неоднозначные файлы в соответствующей программе
Я пытался связать расширение файла с этим сценарием, но Windows 7 не позволяла мне. Вместо этого он просто связал его с Python, поэтому я вошел в реестр и добавил имя сценария вручную.
Возможности для улучшения, но это работает. Я могу дважды щелкнуть по разным файлам с одинаковым расширением .sch, и они открываются в разных приложениях.
Обновление: я преобразовал его в .exe, используя cx_freeze, с внешним файлом конфигурации YAML, и его легко связать. Смотрите также это libmagic предложение . Не уверен, стоит ли мне превращать это в полноценный «libmagic launcher for Windows» или лучше обрабатывать только одно расширение файла с одним .exe и простым YAML-файлом.
источник
Для начала вы можете переименовать один из типов файлов, чтобы иметь новое расширение, и использовать диалог «открыть с», чтобы установить программу по умолчанию для открытия файлов этих типов.
Это не касается проблемы переименования. Но вы упрощаете вещи, создавая специальную папку, куда вы помещаете все файлы из одной из программ. Затем вы можете написать скрипт для автоматического переименования файлов в этой папке в новое расширение файла.
У вас могут возникнуть проблемы с диалогом «Открыть файл» в вашей программе, в зависимости от того, как он настроен. Но если у вас есть одна папка, в которой находятся все ваши файлы, вы можете просто использовать это.
Более сложным, но потенциально лучшим способом было бы создать прокси-программу. Сохраните все расширения файлов, но прокси-программы должны открыть их. Пусть ваша программа проверит двоичный файл и выберет тип файла и какую программу запустить. Это потребует от вас потратить некоторое время на написание вашей программы, которая может или не может стоить вам.
источник
Microsoft Visual Studio реализует вашу последнюю идею. Когда вы запускаете файл .sln, небольшая заглушка проверяет номер версии решения и запускает правильную версию Visual Studio (если у вас установлено несколько версий).
Конечно, координация здесь немного проще, поскольку (A) формат файла предназначен для этого и (B) это все версии одного и того же программного обеспечения от одного производителя.
источник
Быстрое решение - добавить дополнительные контекстные записи в контекстное меню проводника. Или использовать контекстную запись «открыть с». Первый удобнее, так как можно добавить параметры вызова и указать «говорящие» имена. Это также позволяет открыть файл с разными версиями одной и той же программы (если установлена параллельно).
Конечно, этот подход не является автоматическим. Нужно знать правильное применение. Но для типов файлов, где обнаружение на основе базы данных не будет выполнено (например, текстовые файлы или другие файлы без «магического числа»), у вас всегда есть выбор.
Кстати: менее известная ОС 'GEOS' (которая была конкурентом Win3 в то время и далеко впереди) имела фиксированный заголовок 256 байт для всех файлов, где создавалось приложение, значок, уведомления об авторских правах (вместе со свободным полем для собственные заметки). Поскольку это была часть файла, а не файловая система или словарь ОС, она была прозрачной, когда файлы перемещались по файловым системам или даже в другую ОС (было расширение проводника для W95).
источник