Dapatkan Windows untuk memperlakukan file dengan ekstensi yang sama secara berbeda

10

Banyak program menggunakan ekstensi file yang sama, tetapi formatnya sangat berbeda dan tidak kompatibel. Misalnya, saya memiliki .schfile di komputer saya yang memiliki setidaknya 5 format berbeda (TINA, PSpice, PADS, Protel, dan Eagle). Apakah ada cara untuk membuat Windows memperlakukan mereka secara berbeda, sehingga mengklik dua kali pada file seperti itu akan membukanya di program yang seharusnya dibuka?

Linux menggunakan angka ajaib dalam file itu sendiri untuk membedakan, dan hanya menggunakan ekstensi file sebagai paket cadangan. (Semua file PNG mulai dengan byte 89 50 4E 47 0D 0A 1A 0A , misalnya, terlepas dari apa yang Anda beri nama.) Akan lebih baik jika Windows dapat mendukung ini, tetapi mungkin sangat sulit untuk diterapkan. Mungkin sesuatu yang lebih sederhana seperti ekstensi tingkat kedua, seperti filename.program1.schdan filename.program2.sch? Mungkin beberapa jenis filter yang mengubah nama file dengan cepat?

Gagasan yang lebih baik: Mengaitkan ekstensi yang ambigu dengan file pra-prosesor (file .bat atau aplikasi khusus) yang memeriksa ekstensi level kedua atau masuk ke file itu sendiri dan memindai nomor ajaib dan kemudian meluncurkan program yang sesuai?

endolit
sumber
1
TrID mungkin menarik bagi Anda - ia memiliki basis data 4400 tanda tangan biner.
josh3736
Saya ingat ini dulu terjadi pada RISC OS tetapi kadang-kadang digunakan untuk menyebabkan frustrasi ketika Anda memiliki beberapa aplikasi yang dapat memproses jenis file yang sama dan itu akan membuka program dengan program yang salah!
Matt Wilko
@ Mat: Bagus, terima kasih! file-extension.net/seeker/file_extension_sch
endolith

Jawaban:

9

Windows tidak meluncurkan file berdasarkan informasi apa pun dalam file - membangun basis data untuk itu akan membutuhkan banyak pekerjaan dan pemrograman. Satu-satunya cara yang benar untuk mengidentifikasi file adalah dengan tanda tangan biner dalam file tersebut, jika file tersebut memilikinya, dan ini tergantung pada pembuat perangkat lunak untuk mengimplementasikannya.

Di Windows, file diteruskan ke program yang Anda tentukan untuk ekstensi file tertentu. Windows menentukan ekstensi file sebagai substring yang mengikuti kejadian terakhir suatu periode, jadi itu tidak mungkin dengan nama file yang Anda posting.

Anda harus memberi nama ulang file (dan memberi mereka ekstensi file unik), atau menulis file batch untuk meluncurkan aplikasi yang sesuai untuk Anda. Untuk detail lebih lanjut, lihat artikel Technet ini .

Penerobosan
sumber
1
Saya mencoba membuat ini bekerja dengan membuat ekstensi file yang unik, tetapi bahkan jika dia melakukannya, masalah sebenarnya adalah sebagian besar program hanya akan mengenali ekstensi mereka sendiri meskipun ada konten, dan tidak akan membukanya.
KCotreau
2
Saya akan senang melihat seseorang melakukan ini. Saya pikir cara Anda menyiasatinya adalah dengan memiliki satu program membuka file dari semua ekstensi, dan meminta program itu menyimpan databasenya sendiri (menggunakan aliran alternatif NTFS untuk melacak file) dan meluncurkan masing-masing program yang ditentukan oleh pengguna untuk setiap file. Ini tidak akan bahwa banyak pekerjaan, tapi aku bisa melihat banyak masalah dengan pendekatan ini, sehingga mungkin mengapa tidak ada yang melakukannya.
Sasha Chedygov
2
itu tidak akan TERLALU keras - ada alat yang melakukannya (trid, atau file) dan kebanyakan oses berbasis posix melihat header file, dan bukan ekstensi. Ini kurang masalah pilihan desain, daripada jumlah usaha yang dibutuhkan. Secara alami ini akan jauh lebih sulit untuk pihak ketiga, tetapi jika MS merasa itu diperlukan, ini mungkin semi-sepele
Journeyman Geek
3
"Menggunakan aliran alternatif NTFS untuk melacak file." Jelas bagi saya mengapa Windows tidak mengimplementasikan model Linux / POSIX. Sederhananya itu membutuhkan file baca. Jika itu masalahnya, setiap kali Anda mengklik kanan file, itu harus mematikan file yang mahal. Lebih buruk lagi, bayangkan jika itu adalah file jaringan dan koneksi memiliki kelambatan yang nyata. Orang-orang hanya akan menyalahkan WinDoze. Raymond Chen akan menampar teknik ini juga karena itu akan menyebabkan file ditarik kembali jika itu pada area penyimpanan tersier.
surfasb
1
Tetapi Windows memungkinkan Anda untuk memecahkan model itu. . .
surfasb
8

Saya memecahkannya sendiri:

Saya membuat skrip Python yang membaca beberapa byte pertama file dan membandingkannya dengan kamus, kemudian meluncurkan program yang sesuai berdasarkan angka ajaib.

import sys
import subprocess

magic_numbers = {
'OB': r'C:\Program Files (x86)\DesignSoft\Tina 9 - TI\TINA.EXE', # TINA
'*v': r'C:\Program Files (x86)\Orcad\Capture\Capture.exe', #PSpice
'DP': r'C:\Program Files (x86)\Design Explorer 99 SE\Client99SE.exe', #Protel
'\x00\xFE': r'C:\MentorGraphics\9.0PADS\SDD_HOME\Programs\powerlogic.exe', #PADS Logic
'\x10\x80': r'C:\Program Files (x86)\EAGLE-5.11.0\bin\eagle.exe', # Eagle
}

filename = sys.argv[1]
f = open(filename, 'rb')
# Read just enough bytes to match the keys
magic_n = f.read(max(map(len, magic_numbers)))

subprocess.call([magic_numbers[magic_n], filename])

Versi terbaru akan ada di sini: Luncurkan file ambigu dalam program yang sesuai

Saya mencoba mengaitkan ekstensi file dengan skrip ini, tetapi Windows 7 tidak membiarkan saya. Itu hanya dikaitkan dengan Python saja, jadi saya pergi ke registri dan menambahkan nama skrip secara manual.

Cara mengaitkan ekstensi file dengan skrip Python

Ruang untuk perbaikan, tetapi berhasil. Saya dapat mengklik dua kali pada file yang berbeda dengan ekstensi .sch yang sama dan mereka membuka di aplikasi yang berbeda.

Pembaruan: Saya telah mengonversinya menjadi .exe menggunakan cx_freeze, dengan file konfigurasi YAML eksternal, dan mudah untuk dikaitkan. Lihat juga proposal libmagic ini . Tidak yakin apakah saya harus menjadikan ini "libmagic launcher untuk Windows" yang lengkap atau apakah lebih baik hanya menangani satu ekstensi file dengan satu .exe dan file YAML sederhana.

endolit
sumber
2
Ini sebenarnya sepele untuk ditulis sebagai exe. . .
surfasb
Tidak jika Anda tidak tahu cara menulis exes :)
endolith
1
Itu bukan mengetukmu. Itu adalah sesuatu untuk saya sendiri :)
surfasb
@surasb: Jadi, apakah Anda sudah menulis saya .exe? Itu sepele, bukan? :)
endolith
Saya benar-benar lupa! Saya telah bermain-main dengan jerat 3D di Silverlight selama seminggu terakhir. Kemudian malam ini, setelah saya mengasuh array RAID ini. . .
surfasb
3

Untuk memulai, Anda dapat mengganti nama salah satu jenis file untuk memiliki ekstensi baru, dan menggunakan dialog "buka dengan" untuk mengatur program default untuk membuka jenis file tersebut.

Ini tidak menangani masalah penggantian nama. Tetapi Anda menyederhanakan banyak hal dengan membuat folder tertentu tempat Anda meletakkan semua file dari salah satu program. Kemudian Anda dapat menulis skrip untuk secara otomatis mengubah nama file di folder itu menjadi ekstensi file baru Anda.

Anda mungkin mengalami masalah dengan dialog "Buka File" di program Anda, tergantung pada bagaimana pengaturannya. Tetapi jika Anda memiliki satu folder di mana semua file Anda, Anda harus dapat menggunakannya.

Cara yang lebih rumit, tetapi berpotensi lebih baik adalah membuat program proxy. Simpan semua ekstensi file, tetapi biarkan dibuka oleh program proxy. Mintalah program Anda memeriksa biner dan memilih jenis file apa itu dan program mana yang akan dimulai. Ini akan mengharuskan Anda meluangkan waktu untuk menulis program Anda, yang mungkin atau mungkin tidak sepadan bagi Anda.

Joel
sumber
Ya, tetapi menggunakan ekstensi yang sama sekali berbeda berarti Anda sering tidak dapat membuka file dari dalam program.
endolith
ya saya tunjukkan itu. Metode kedua yang saya sarankan tidak akan memiliki masalah itu.
Joel
2

Microsoft Visual Studio mengimplementasikan ide terakhir Anda. Ketika Anda meluncurkan file .sln, rintisan kecil memeriksa nomor versi solusi dan meluncurkan versi yang benar dari Visual Studio (jika Anda sudah menginstal beberapa versi).

Tentu saja, koordinasi di sini sedikit lebih mudah karena (A) format file dirancang untuk ini dan (B) mereka semua versi perangkat lunak yang sama, dari produsen yang sama.

MSalters
sumber
1

Solusi cepat adalah menambahkan entri konteks tambahan ke menu konteks explorer. Atau untuk menggunakan entri konteks 'terbuka dengan'. Yang pertama lebih nyaman karena seseorang dapat menambahkan parameter panggilan dan menentukan nama 'jitu'. Ini juga memungkinkan membuka file dengan versi berbeda dari program yang sama (jika dipasang paralel).

Tentu saja, pendekatan ini tidak otomatis. Kita harus tahu aplikasi yang tepat. Tetapi untuk jenis file di mana deteksi berbasis basis data akan gagal (mis. File teks atau file lain tanpa "angka ajaib"), Anda selalu memiliki pilihan.

BTW: OS 'GEOS' yang kurang dikenal (yang merupakan pesaing Win3 pada saat itu dan jauh di depan) memiliki header 256 byte tetap untuk semua file di mana aplikasi pembuatan, ikon pemberitahuan hak cipta disimpan (bersama dengan bidang gratis untuk catatan sendiri). Karena ini adalah bagian dari file dan bukan sistem file atau kamus OS, itu transparan ketika file dipindahkan di seluruh sistem file atau bahkan ke OS yang berbeda (ada ekstensi penjelajah untuk W95).

Peter Painter
sumber