在 Tauri 2 项目中打开文件夹
在 Tauri 2 项目中,你可以使用以下几种方法来打开文件夹,类似于 macOS 中的 open ./
命令功能:
方法一:使用 shell 命令
use tauri::Manager;#[tauri::command]
async fn open_folder(path: String) -> Result<(), String> {#[cfg(target_os = "macos")]let command = "open";#[cfg(target_os = "windows")]let command = "explorer";#[cfg(target_os = "linux")]let command = "xdg-open";std::process::Command::new(command).arg(&path).spawn().map_err(|e| e.to_string())?;Ok(())
}fn main() {tauri::Builder::default().invoke_handler(tauri::generate_handler![open_folder]).run(tauri::generate_context!()).expect("error while running tauri application");
}
然后在你的前端代码中调用:
import { invoke } from '@tauri-apps/api/tauri';// 打开当前目录
invoke('open_folder', { path: '.' });
方法二:使用 Tauri 的 dialog API
Tauri 2 提供了更安全的 API 来打开文件夹:
use tauri::Manager;#[tauri::command]
async fn open_folder(app: tauri::AppHandle, path: String) -> Result<(), String> {app.shell().open(&path, None).map_err(|e| e.to_string())?;Ok(())
}
方法三:使用平台特定的 API
对于更精细的控制,你可以使用平台特定的 API:
#[tauri::command]
async fn open_folder(path: String) -> Result<(), String> {if cfg!(target_os = "macos") {std::process::Command::new("open").arg(&path).spawn().map_err(|e| e.to_string())?;} else if cfg!(target_os = "windows") {std::process::Command::new("explorer").arg(&path).spawn().map_err(|e| e.to_string())?;} else {std::process::Command::new("xdg-open").arg(&path).spawn().map_err(|e| e.to_string())?;}Ok(())
}
注意事项
- 确保在
tauri.conf.json
中允许 shell 命令执行(如果使用方法一或三) - 对于生产环境,建议使用方法二(dialog API)以获得更好的安全性和跨平台兼容性
- 路径处理时要注意跨平台兼容性,可以使用
std::path::Path
来处理路径
选择哪种方法取决于你的具体需求和安全性考虑。方法二(使用 Tauri 的 dialog API)通常是推荐的方式,因为它经过了 Tauri 团队的优化和测试。