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

相关推荐
不爱记笔记1 小时前
苹果WWDC 2026全解析:Apple Intelligence+ 性能提升数据一览
macos·ios·wwdc
小小程序员mono5 小时前
WWDC 2026 之后,M5 桌面 Mac 上市时间预测
macos·ios·wwdc
yuguo.im6 小时前
Mac M4 安装 sd-webui 踩坑全记录
macos·stable diffusion
守城小轩7 小时前
Chromium 146 编译指南 macOS篇:获取源代码(四)
macos
comcoo7 小时前
避坑指南:OpenClaw v2.7.9 Windows/macOS 零基础安装全过程
人工智能·windows·macos·github·开源软件·open claw·open claw部署包
robinLi09138 小时前
docker mac 下载不同系统架构镜像
macos·docker·容器
卡卡西Sensei8 小时前
2026 苹果 WWDC 完整总结
macos·ios·wwdc
Tr2e1 天前
🐱 从 0 到 1:用 Swift 手搓一个 macOS 桌面宠物(附源码)
macos·ios·swift
Mac技巧大咖1 天前
macOS 27 或成 Intel Mac 分水岭:老款 Mac 用户升级前要注意什么?
macos·macos 27
上天_去_做颗惺星 EVE_BLUE1 天前
【新 Linux 服务器上手全攻略】系统巡检、存储规划与开发环境初始化
linux·运维·服务器·ubuntu·macos·centos