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

相关推荐
伊织code6 小时前
macOS - 根据序列号查看机型、保障信息
macos·mac·macbook·查看·序列号·机型·对应
韩曙亮9 小时前
【错误记录】Mac 命令行执行 brew 命令报错 ( Error: Failed to upgrade Homebrew Portable Ruby! )
redis·macos·ruby
程序员的世界你不懂12 小时前
MAC环境安装Appium+JAVA
macos·appium
蓝纹绿茶16 小时前
【本机已实现】使用Mac部署Triton服务,使用perf_analyzer、model_analyzer
人工智能·算法·macos·机器学习
丁学文武2 天前
Mac 安装ElasticSearch和Kibana详细教程
elasticsearch·macos·langchain·jenkins
2501_920552562 天前
Mac电脑 充电限制保护工具 AlDente Pro
macos·电脑·充电保护
2501_920552562 天前
Mac电脑 Office 2024 LTSC 长期支持版(Excel、Word、PPT)
macos·word·powerpoint·excel·mac
2501_915106322 天前
数据差异的iOS性能调试:设备日志导出和iOS文件管理
websocket·http·macos·ios·https·udp·cocoa
小远披荆斩棘2 天前
恢复MacOS 26系统后台的动作命令
macos
彬彬醤2 天前
TikTok for Mac?Mac用户的TikTok使用指南
大数据·网络·tcp/ip·web安全·macos·重构