在tauri,用rust定义一个函数暴露给前端使用。rust读取文件目录下的文件,形参是文件目录的路径,返回一个值为{path:文件目录下的文件的文件名,name:文件路径,isDir:是否为文件夹}组成的对象的数组
时间: 2024-04-12 22:30:50 浏览: 8
在 Tauri 中,你可以使用 `tauri::command` 宏来定义一个函数,然后将其暴露给前端使用。下面是一个示例代码,演示如何在 Rust 中读取文件目录下的文件,并将结果以 JSON 数组的形式返回给前端:
```rust
use serde::{Deserialize, Serialize};
use std::fs;
use std::path::{Path, PathBuf};
use tauri::command;
#[derive(Debug, Serialize, Deserialize)]
struct FileInfo {
path: String,
name: String,
is_dir: bool,
}
#[command]
fn read_directory_files(path: String) -> Vec<FileInfo> {
let path = Path::new(&path);
let mut files = Vec::new();
if let Ok(entries) = fs::read_dir(path) {
for entry in entries {
if let Ok(entry) = entry {
let entry_path = entry.path();
if let Some(file_name) = entry_path.file_name() {
if let Some(file_name_str) = file_name.to_str() {
let is_dir = entry_path.is_dir();
files.push(FileInfo {
path: file_name_str.to_string(),
name: entry_path.to_string_lossy().to_string(),
is_dir,
});
}
}
}
}
}
files
}
fn main() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![read_directory_files])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
```
在上面的示例中,我们首先定义了一个 `FileInfo` 结构体,并使用 `serde` 库的 `Serialize` 和 `Deserialize` 特性来支持 JSON 的序列化和反序列化。
然后,我们使用 `tauri::command` 宏来定义了一个名为 `read_directory_files` 的函数,它接受一个 `path` 参数作为文件目录的路径,并返回一个 `Vec<FileInfo>` 对象。在函数内部,我们使用与之前相同的逻辑来读取文件目录下的文件,并将结果存储到 `files` 向量中。
最后,在 `main` 函数中,我们使用 `tauri::Builder` 来构建 Tauri 应用,并将 `read_directory_files` 函数注册为一个可供前端调用的命令处理程序。
请确保你已经在 Cargo.toml 文件中添加了以下依赖项:
```toml
[dependencies]
serde = "1.0"
serde_json = "1.0"
tauri = { version = "x.x.x", features = ["default"] }
```
请将示例代码中的 `x.x.x` 替换为你所使用的 Tauri 版本号。