Mehrere Programme verwenden dieselbe Dateierweiterung, aber die Formate sind völlig unterschiedlich und inkompatibel. Zum Beispiel habe ich .sch
Dateien auf meinem Computer, die in mindestens 5 verschiedenen Formaten vorliegen (TINA, PSpice, PADS, Protel und Eagle). Gibt es eine Möglichkeit, Windows dazu zu bringen, sie anders zu behandeln, sodass ein Doppelklick auf eine solche Datei sie in dem Programm öffnet, in dem sie geöffnet werden soll?
Linux verwendet magische Zahlen in den Dateien selbst, um zu unterscheiden, und verwendet nur Dateierweiterungen als Fallback-Plan. (Alle PNG-Dateien beginnen beispielsweise mit den Bytes 89 50 4E 47 0D 0A 1A 0A
, unabhängig davon, wie Sie sie nennen.) Es wäre schön, wenn Windows dies unterstützen könnte, aber wahrscheinlich sehr schwer zu implementieren. Vielleicht etwas Einfacheres wie eine Erweiterung der zweiten Ebene, wie filename.program1.sch
und filename.program2.sch
? Vielleicht eine Art Filter, der Dateien im laufenden Betrieb umbenennt?
Bessere Idee: Verknüpfen der mehrdeutigen Erweiterung mit einem Vorprozessor (.bat-Datei oder dedizierte App), der nach einer Erweiterung der zweiten Ebene sucht oder in die Datei selbst geht und nach der magischen Zahl sucht und dann das entsprechende Programm startet?
quelle
Antworten:
Windows startet keine Dateien basierend auf Informationen in der Datei. Das Erstellen einer Datenbank dafür würde unglaublich viel Arbeit und Programmierung erfordern . Die einzig wahre Möglichkeit, eine Datei zu identifizieren, besteht in den binären Signaturen in der Datei, sofern diese überhaupt vorhanden sind. Dies muss vom Software-Autor implementiert werden.
In Windows werden Dateien an das Programm übergeben, das Sie für eine bestimmte Dateierweiterung angegeben haben. Windows bestimmt die Dateierweiterung als Teilzeichenfolge, die auf das letzte Auftreten eines Punkts folgt. Daher ist dies mit den von Ihnen veröffentlichten Dateinamen nicht möglich.
Sie müssen die Dateien entweder umbenennen (und ihnen eindeutige Dateierweiterungen geben) oder eine Batchdatei schreiben, um die entsprechende Anwendung für Sie zu starten. Weitere Informationen finden Sie in diesem Technet-Artikel .
quelle
Ich habe es selbst gelöst:
Ich habe ein Python-Skript erstellt, das die ersten Bytes einer Datei liest, sie mit einem Wörterbuch vergleicht und dann das entsprechende Programm basierend auf den magischen Zahlen startet.
Die neueste Version wird hier sein: Starten Sie mehrdeutige Dateien im entsprechenden Programm
Ich habe versucht, die Dateierweiterung mit diesem Skript zu verknüpfen, aber Windows 7 hat es mir nicht erlaubt. Es wurde stattdessen nur mit Python verknüpft, also ging ich in die Registrierung und fügte den Skriptnamen manuell hinzu.
Raum für Verbesserungen, aber es funktioniert. Ich kann auf verschiedene Dateien mit derselben .sch-Erweiterung doppelklicken und sie werden in verschiedenen Apps geöffnet.
Update: Ich habe es mit cx_freeze mit einer externen YAML-Konfigurationsdatei in eine EXE-Datei konvertiert und es ist einfach zuzuordnen. Siehe auch diesen libmagischen Vorschlag . Ich bin mir nicht sicher, ob ich daraus einen vollwertigen "libmagic Launcher für Windows" machen soll oder ob es besser ist, nur eine Dateierweiterung mit einer EXE-Datei und einer einfachen YAML-Datei zu verarbeiten.
quelle
Zu Beginn können Sie einen der Dateitypen umbenennen, um eine neue Erweiterung zu erhalten, und im Dialogfeld "Öffnen mit" ein Standardprogramm zum Öffnen dieser Dateitypen festlegen.
Dies betrifft jedoch nicht das Umbenennungsproblem. Sie vereinfachen die Dinge jedoch, indem Sie einen bestimmten Ordner erstellen, in dem Sie alle Dateien aus einem der Programme ablegen. Anschließend können Sie ein Skript schreiben, um Dateien in diesem Ordner automatisch in Ihre neue Dateierweiterung umzubenennen.
Je nach Einrichtung haben Sie möglicherweise Probleme mit dem Dialogfeld "Datei öffnen" in Ihrem Programm. Wenn Sie jedoch einen einzigen Ordner haben, in dem sich alle Ihre Dateien befinden, sollten Sie diesen einfach verwenden können.
Ein komplizierterer, aber möglicherweise besserer Weg wäre die Erstellung eines Proxy-Programms. Behalten Sie alle Dateierweiterungen bei, lassen Sie sie jedoch vom Proxy-Programm öffnen. Lassen Sie Ihr Programm die Binärdatei untersuchen und auswählen, um welchen Dateityp es sich handelt und welches Programm gestartet werden soll. Dies erfordert, dass Sie einige Zeit damit verbringen, Ihr Programm zu schreiben, was sich für Sie möglicherweise lohnt oder nicht.
quelle
Microsoft Visual Studio implementiert Ihre letzte Idee. Wenn Sie eine SLN-Datei starten, überprüft ein kleiner Stub die Versionsnummer der Lösung und startet die richtige Version von Visual Studio (wenn Sie mehrere Versionen installiert haben).
Natürlich ist die Koordination hier etwas einfacher, da (A) das Dateiformat dafür ausgelegt ist und (B) alle Versionen derselben Software desselben Herstellers sind.
quelle
Eine schnelle Lösung besteht darin, dem Explorer-Kontextmenü zusätzliche Kontexteinträge hinzuzufügen. Oder um den Kontexteintrag "Öffnen mit" zu verwenden. Die erste ist bequemer, da man Aufrufparameter hinzufügen und 'aussagekräftige' Namen angeben kann. Es ermöglicht auch das Öffnen einer Datei mit verschiedenen Versionen desselben Programms (falls parallel installiert).
Natürlich ist dieser Ansatz nicht automatisch. Man muss die richtige Anwendung kennen. Bei Dateitypen, bei denen die datenbankbasierte Erkennung fehlschlagen würde (z. B. Textdateien oder andere Dateien ohne "magische Zahl"), haben Sie immer die Wahl.
Übrigens: Das weniger bekannte Betriebssystem 'GEOS' (das zu seiner Zeit ein Win3-Konkurrent war und weit voraus) hatte einen festen 256-Byte-Header für alle Dateien, in denen die erstellende Anwendung, das Symbol und die Copyright-Hinweise gespeichert waren (zusammen mit einem freien Feld für eigene Notizen). Da dies Teil der Datei und nicht des Dateisystems oder eines Betriebssystemwörterbuchs war, war es transparent, wenn Dateien über Dateisysteme oder sogar auf ein anderes Betriebssystem verschoben wurden (es gab eine Explorer-Erweiterung für W95).
quelle