tauri2项目打开某个文件夹,类似于mac系统中的 open ./

在 Tauri 2 项目中打开文件夹

在 Tauri 2 项目中,你可以使用以下几种方法来打开文件夹,类似于 macOS 中的 open ./ 命令功能:

方法一:使用 shell 命令

rust 复制代码
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");
}

然后在你的前端代码中调用:

rust 复制代码
import { invoke } from '@tauri-apps/api/tauri';

// 打开当前目录
invoke('open_folder', { path: '.' });

方法二:使用 Tauri 的 dialog API

Tauri 2 提供了更安全的 API 来打开文件夹:

rust 复制代码
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:

rust 复制代码
#[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(())
}

注意事项

  1. 确保在 tauri.conf.json 中允许 shell 命令执行(如果使用方法一或三)
  2. 对于生产环境,建议使用方法二(dialog API)以获得更好的安全性和跨平台兼容性
  3. 路径处理时要注意跨平台兼容性,可以使用 std::path::Path 来处理路径

选择哪种方法取决于你的具体需求和安全性考虑。方法二(使用 Tauri 的 dialog API)通常是推荐的方式,因为它经过了 Tauri 团队的优化和测试。

相关推荐
无意feel10 小时前
MacOS 安装neofetch cmatrix lolcat
macos·数字雨·彩虹特效
KevinShi_BJ12 小时前
MacOS 上安装 Docker 和启动 LangBot
macos
ricky_fan14 小时前
(25年12月)claude code报错:might not be available in your country
macos·bash
james bid14 小时前
MacBook Pro 2015 上 XUbuntu 24.04 启用 eGPU (GeForce GTX 1080 Ti) 和核显黑屏问题解决
linux·ubuntu·macos·cuda·egpu
私人珍藏库15 小时前
[Mac] Mac风扇控制软件 iFan V1.1.1
macos
腾讯云qcloud075515 小时前
腾讯位置商业授权iOS 轨迹SDK
macos·ios·cocoa
新手村领路人15 小时前
MacOS Tahoe26.1自制定时休眠app
macos
2501_9160074715 小时前
没有 Mac,如何在 Windows 上架 iOS 应用?一套可落地的工程方案
android·macos·ios·小程序·uni-app·iphone·webview
乐之者v1 天前
mac操作快捷键命令
macos
一步徐龙的浪1 天前
Scholaread Mac版更新后无法用手机验证码登录
macos·scholaread·靠岸学术