在各个系统上设置文件类型关联的方式:
使用以下任意方式:
-
右键单击文件: 找到你想要关联的文件类型,右键单击该文件,选择“打开方式”。
-
选择默认程序: 在弹出的菜单中,选择“选择其他应用”。
-
选择应用程序: 如果你看到要使用的应用程序,选择它。如果没有,点击“更多应用”以查找。若依然找不到,点击“在这台电脑上查找其他应用”。
-
设置为默认: 确保勾选“始终使用此应用程序打开 .ext 文件”(其中
.ext
是文件扩展名),然后点击“确定”。
-
打开注册表编辑器: 按下
Win + R
,输入regedit
,然后按 Enter。 -
导航到文件类型: 找到
HKEY_CLASSES_ROOT
下的文件扩展名(如.typeName
),并查看其默认值。 -
设置程序: 查找与该扩展名关联的程序(通常在
HKEY_CLASSES_ROOT\[file_extension]\OpenWithProgids
中),然后设置相应的程序路径。
执行:
$ext = ".typeName"
$app = "C:\Path\To\YourApp.exe"
ftype MyApp="$app `%1"
assoc $ext=MyApp
在 macOS 中,文件类型关联主要通过“获取信息”窗口进行设置。
-
选择文件: 找到你想要更改关联的文件,右键单击并选择“获取信息”或按下
Command + I
。 -
更改打开方式: 在“获取信息”窗口中,找到“打开方式”部分。点击下拉菜单,选择你想要关联的应用程序。如果没有在列表中,选择“其他”并找到你想要的应用程序。
-
应用于所有: 如果你希望所有相同类型的文件都使用该应用程序打开,点击“更改全部…”按钮。确认更改后,所有相同类型的文件将使用所选的应用程序打开。
可以使用 duti
工具来设置文件类型关联。首先需要安装 duti
(可以通过 Homebrew 安装)。
brew install duti
然后使用以下命令设置文件类型关联:
duti -s com.example.YourApp .typeName all
这里的 com.example.YourApp
是你应用程序的 bundle identifier。
首先要获取 MIME 类型,使用 file
命令。例如:
file --mime-type filename.ext
确保你已经在 .desktop
文件中正确设置了 MimeType
字段。例如:
[Desktop Entry]
Name=App1
GenericName=App1
Comment=App1
TryExec=App1
Exec=App1
Terminal=false
Type=Application
Keywords=EDA
Icon=App1
Categories=Utility;TEDA;
StartupNotify=false
MimeType=binary/typeName;
修改 .desktop
文件后,运行以下命令以更新 MIME 数据库:
update-desktop-database ~/.local/share/applications/
可以使用以下命令验证 MIME 类型是否成功关联:
xdg-mime query default binary/typeName
示例如下:
xdg-mime default your-desktop-file.desktop binary/typeName
将 your-desktop-file.desktop
替换为你的实际 .desktop
文件名。
自定义一个二进制文件,默认会被识别为:application/octet-stream类型,可使用以下方式让系统识别自定义的类型。
例如,需要设计一个类型名为binary/typ1,首先我们的二进制文件魔数(magic number)设置为typ1
(写入二进制文件时,前几个byte的内容),要与程序MyApp关联,然后每个平台可进行如下设置。
-
创建或编辑系统魔数规则文件,添加规则
文件
/usr/share/misc/magic
或/etc/magic
#添加规则 #如果一个魔术占位4byte,而其实际只有3byte,使用了1byte补0,则在后面要补上对应数量的\0,如abc\0 0 string typ1 TYP1 my type >4 byte x \b, version %d.%d !:mime binary/typ1
-
系统级 MIME 类型配置
编辑
/usr/share/mime/packages/binary-typ1.xml
<?xml version="1.0" encoding="UTF-8"?> <mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info"> <mime-type type="binary/typ1"> <comment>ELA Waveform Data</comment> <glob pattern="*.typ1"/> <magic priority="50"> <match type="string" offset="0" value="ELA\0"/> </magic> </mime-type> </mime-info>
-
更新系统 MIME 数据库
update-mime-database /usr/share/mime
-
系统级应用程序关联 文件
/usr/share/applications/myApp.desktop
[Desktop Entry] Type=Application Name=myApp Exec=myApp %f MimeType=binary/typ1; Terminal=false Categories=Development;
方法同系统级别的,只是文件都是在用户目录级别,以下仅列出文件位置:
-
创建魔数规则文件
~/.local/share/magic/typ1.magic
-
编译用户魔数文件
file -C -m ~/.local/share/magic/typ1.magic
-
创建用户 MIME 类型配置
~/.local/share/mime/packages/binary-typ1.xml
-
更新用户 MIME 数据库
update-mime-database ~/.local/share/mime
-
用户级应用程序关联,文件
~/.local/share/applications/myApp.desktop
-
创建系统魔数规则文件
/usr/local/share/misc/magic.typ1
,并添参照Linux的方法添加内容。 -
编译魔数文件
sudo file -C -m /usr/local/share/misc/magic.typ1
-
创建系统级 UTI 定义文件
文件
/Library/UTIs/com.yourcompany.typ1.utis
,内容:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>UTExportedTypeDeclarations</key> <array> <dict> <key>UTTypeIdentifier</key> <string>com.yourcompany.typ1</string> <key>UTTypeDescription</key> <string>ELA Waveform Data</string> <key>UTTypeConformsTo</key> <array> <string>public.data</string> </array> <key>UTTypeTagSpecification</key> <dict> <key>public.filename-extension</key> <array> <string>typ1</string> </array> <key>public.mime-type</key> <array> <string>binary/typ1</string> </array> </dict> </dict> </array> </dict> </plist>
同系统级别方法,只是文件位置在用户目录级别:
- 用户魔数规则文件
~/Library/Application\ Support/file/magic/typ1.magic
- 用户级 UTI 定义
~/Library/Application\ Support/UTIs/com.yourcompany.typ1.utis
创建并执行注册表文件 typ1_system.reg
:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.typ1]
@="ELA.WaveformData"
[HKEY_CLASSES_ROOT\ELA.WaveformData]
@="ELA Waveform Data"
[HKEY_CLASSES_ROOT\ELA.WaveformData\DefaultIcon]
@="C:\\Program Files\\myApp\\typ1.ico"
[HKEY_CLASSES_ROOT\ELA.WaveformData\shell\open\command]
@="\"C:\\Program Files\\myApp\\typ1viewer.exe\" \"%1\""
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MIME\Database\Content Type\binary/typ1]
"Extension"=".typ1"
创建并注册表文件 typ1_user.reg
:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\.typ1]
@="ELA.WaveformData"
[HKEY_CURRENT_USER\Software\Classes\ELA.WaveformData]
@="ELA Waveform Data"
[HKEY_CURRENT_USER\Software\Classes\ELA.WaveformData\DefaultIcon]
@="%USERPROFILE%\\AppData\\Local\\myApp\\typ1.ico"
[HKEY_CURRENT_USER\Software\Classes\ELA.WaveformData\shell\open\command]
@="\"%USERPROFILE%\\AppData\\Local\\myApp\\typ1viewer.exe\" \"%1\""
-
Linux/macOS
# 系统级验证 file test.typ1 xdg-mime query filetype test.typ1 # Linux mdls -name kMDItemContentType test.typ1 # macOS # 用户级验证 file --magic-file ~/.local/share/magic/typ1.mgc test.typ1
-
Windows
# 检查系统级关联 Get-ItemProperty -Path "HKLM:\SOFTWARE\Classes\.typ1" # 检查用户级关联 Get-ItemProperty -Path "HKCU:\Software\Classes\.typ1"