在 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 团队的优化和测试。