在 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 團隊的優化和測試。