跳到内容
Tauri

文件系统

访问文件系统。

此插件需要 Rust 版本至少为 **1.77.2**

平台 级别 备注
windows

通过 MSI 或 NSIS 在 perMachineboth 模式下安装的应用程序,在 $RESOURCES 文件夹中进行写操作需要管理员权限。

linux

$RESOURCES 文件夹没有写入权限

macos

$RESOURCES 文件夹没有写入权限

android

默认情况下访问权限被限制在应用程序文件夹内

ios

默认情况下访问权限被限制在应用程序文件夹内

安装 fs 插件以开始使用。

使用你的项目包管理器添加依赖项

npm run tauri add fs

使用音频 (audio)、缓存 (cache)、文档 (documents)、下载 (downloads)、图片 (picture)、公共 (public) 或视频 (video) 目录时,你的应用必须具有对外部存储的访问权限。

将以下权限添加到 gen/android/app/src/main/AndroidManifest.xml 文件中的 manifest 标签内

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Apple 要求应用开发者说明 API 使用的经批准原因,以增强用户隐私。

你必须在 src-tauri/gen/apple 文件夹中创建一个 PrivacyInfo.xcprivacy 文件,并包含所需的 NSPrivacyAccessedAPICategoryFileTimestamp 键和 C617.1 推荐原因。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
</array>
</dict>
</plist>

fs 插件在 JavaScript 和 Rust 中均可用。

import { exists, BaseDirectory } from '@tauri-apps/plugin-fs';
// when using `"withGlobalTauri": true`, you may use
// const { exists, BaseDirectory } = window.__TAURI__.fs;
// Check if the `$APPDATA/avatar.png` file exists
await exists('avatar.png', { baseDir: BaseDirectory.AppData });

该模块可防止路径遍历,不允许使用父目录访问符(即不允许使用“/usr/path/to/../file”或“../path/to/file”路径)。使用此 API 访问的路径必须是相对于基础目录之一的路径,或者是使用路径 API 创建的。

更多信息请参见 @tauri-apps/plugin-fs - 安全性

文件系统插件提供了两种操作路径的方法:基础目录路径 API

  • 基础目录

    每个 API 都有一个 options 参数,让你定义一个作为操作工作目录的 baseDir

    import { readFile } from '@tauri-apps/plugin-fs';
    const contents = await readFile('avatars/tauri.png', {
    baseDir: BaseDirectory.Home,
    });

    在上面的示例中,因为使用了 **Home** 基础目录,所以会读取 ~/avatars/tauri.png 文件。

  • 路径 API

    或者,你可以使用路径 API 来执行路径操作。

    import { readFile } from '@tauri-apps/plugin-fs';
    import * as path from '@tauri-apps/api/path';
    const home = await path.homeDir();
    const contents = await readFile(await path.join(home, 'avatars/tauri.png'));

创建一个文件并返回其句柄。如果文件已存在,它将被截断。

import { create, BaseDirectory } from '@tauri-apps/plugin-fs';
const file = await create('foo/bar.txt', { baseDir: BaseDirectory.AppData });
await file.write(new TextEncoder().encode('Hello world'));
await file.close();

为了性能,该插件提供了用于写入文本文件和二进制文件的独立 API。

  • 文本文件

    import { writeTextFile, BaseDirectory } from '@tauri-apps/plugin-fs';
    const contents = JSON.stringify({ notifications: true });
    await writeTextFile('config.json', contents, {
    baseDir: BaseDirectory.AppConfig,
    });
  • 二进制文件

    import { writeFile, BaseDirectory } from '@tauri-apps/plugin-fs';
    const contents = new Uint8Array(); // fill a byte array
    await writeFile('config', contents, {
    baseDir: BaseDirectory.AppConfig,
    });

打开文件并返回其句柄。使用此 API,你可以更好地控制文件的打开方式(只读模式、只写模式、追加而非覆盖、仅在不存在时创建等)。

  • 只读

    这是默认模式。

    import { open, BaseDirectory } from '@tauri-apps/plugin-fs';
    const file = await open('foo/bar.txt', {
    read: true,
    baseDir: BaseDirectory.AppData,
    });
    const stat = await file.stat();
    const buf = new Uint8Array(stat.size);
    await file.read(buf);
    const textContents = new TextDecoder().decode(buf);
    await file.close();
  • 只写

    import { open, BaseDirectory } from '@tauri-apps/plugin-fs';
    const file = await open('foo/bar.txt', {
    write: true,
    baseDir: BaseDirectory.AppData,
    });
    await file.write(new TextEncoder().encode('Hello world'));
    await file.close();

    默认情况下,任何 file.write() 调用都会截断文件。请查看以下示例,了解如何向现有内容追加数据。

  • 追加

    import { open, BaseDirectory } from '@tauri-apps/plugin-fs';
    const file = await open('foo/bar.txt', {
    append: true,
    baseDir: BaseDirectory.AppData,
    });
    await file.write(new TextEncoder().encode('world'));
    await file.close();

    请注意,{ append: true } 的效果与 { write: true, append: true } 相同。

  • 截断

    当设置了 truncate 选项且文件已存在时,它将被截断为长度 0。

    import { open, BaseDirectory } from '@tauri-apps/plugin-fs';
    const file = await open('foo/bar.txt', {
    write: true,
    truncate: true,
    baseDir: BaseDirectory.AppData,
    });
    await file.write(new TextEncoder().encode('world'));
    await file.close();

    此选项要求 writetrue

    如果你想使用多个 file.write() 调用来重写现有文件,可以将其与 append 选项一起使用。

  • 创建

    默认情况下,open API 仅打开现有文件。要实现“如果文件不存在则创建,如果存在则打开”,请将 create 设置为 true

    import { open, BaseDirectory } from '@tauri-apps/plugin-fs';
    const file = await open('foo/bar.txt', {
    write: true,
    create: true,
    baseDir: BaseDirectory.AppData,
    });
    await file.write(new TextEncoder().encode('world'));
    await file.close();

    为了创建文件,writeappend 也必须设置为 true

    如果要在文件已存在时失败,请参阅 createNew

  • createNew

    createNew 的工作方式类似于 create,但如果文件已存在,它将失败。

    import { open, BaseDirectory } from '@tauri-apps/plugin-fs';
    const file = await open('foo/bar.txt', {
    write: true,
    createNew: true,
    baseDir: BaseDirectory.AppData,
    });
    await file.write(new TextEncoder().encode('world'));
    await file.close();

    为了创建文件,write 也必须设置为 true

为了性能,该插件提供了用于读取文本文件和二进制文件的独立 API。

  • 文本文件

    import { readTextFile, BaseDirectory } from '@tauri-apps/plugin-fs';
    const configToml = await readTextFile('config.toml', {
    baseDir: BaseDirectory.AppConfig,
    });

    如果文件较大,你可以使用 readTextFileLines API 流式处理其行内容。

    import { readTextFileLines, BaseDirectory } from '@tauri-apps/plugin-fs';
    const lines = await readTextFileLines('app.logs', {
    baseDir: BaseDirectory.AppLog,
    });
    for await (const line of lines) {
    console.log(line);
    }
  • 二进制文件

    import { readFile, BaseDirectory } from '@tauri-apps/plugin-fs';
    const icon = await readFile('icon.png', {
    baseDir: BaseDirectory.Resources,
    });

调用 remove() 来删除文件。如果文件不存在,则会返回错误。

import { remove, BaseDirectory } from '@tauri-apps/plugin-fs';
await remove('user.db', { baseDir: BaseDirectory.AppLocalData });

copyFile 函数接收源路径和目标路径。请注意,你必须分别配置每个基础目录。

import { copyFile, BaseDirectory } from '@tauri-apps/plugin-fs';
await copyFile('user.db', 'user.db.bk', {
fromPathBaseDir: BaseDirectory.AppLocalData,
toPathBaseDir: BaseDirectory.Temp,
});

在上面的示例中,<app-local-data>/user.db 文件被复制到 $TMPDIR/user.db.bk。

使用 exists() 函数检查文件是否存在。

import { exists, BaseDirectory } from '@tauri-apps/plugin-fs';
const tokenExists = await exists('token', {
baseDir: BaseDirectory.AppLocalData,
});

文件元数据可以通过 statlstat 函数检索。stat 会跟随符号链接(如果其指向的实际文件不在作用域允许范围内,则返回错误),而 lstat 不会跟随符号链接,而是返回符号链接本身的信息。

import { stat, BaseDirectory } from '@tauri-apps/plugin-fs';
const metadata = await stat('app.db', {
baseDir: BaseDirectory.AppLocalData,
});

rename 函数接收源路径和目标路径。请注意,你必须分别配置每个基础目录。

import { rename, BaseDirectory } from '@tauri-apps/plugin-fs';
await rename('user.db.bk', 'user.db', {
fromPathBaseDir: BaseDirectory.AppLocalData,
toPathBaseDir: BaseDirectory.Temp,
});

在上面的示例中,<app-local-data>/user.db.bk 文件被重命名为 $TMPDIR/user.db。

将指定文件截断或扩展至指定的长度(默认为 0)。

  • 截断至 0 长度
import { truncate } from '@tauri-apps/plugin-fs';
await truncate('my_file.txt', 0, { baseDir: BaseDirectory.AppLocalData });
  • 截断至特定长度
import {
truncate,
readTextFile,
writeTextFile,
BaseDirectory,
} from '@tauri-apps/plugin-fs';
const filePath = 'file.txt';
await writeTextFile(filePath, 'Hello World', {
baseDir: BaseDirectory.AppLocalData,
});
await truncate(filePath, 7, {
baseDir: BaseDirectory.AppLocalData,
});
const data = await readTextFile(filePath, {
baseDir: BaseDirectory.AppLocalData,
});
console.log(data); // "Hello W"

要创建目录,请调用 mkdir 函数。

import { mkdir, BaseDirectory } from '@tauri-apps/plugin-fs';
await mkdir('images', {
baseDir: BaseDirectory.AppLocalData,
});

readDir 函数会递归列出目录中的条目。

import { readDir, BaseDirectory } from '@tauri-apps/plugin-fs';
const entries = await readDir('users', { baseDir: BaseDirectory.AppLocalData });

调用 remove() 来删除目录。如果目录不存在,则会返回错误。

import { remove, BaseDirectory } from '@tauri-apps/plugin-fs';
await remove('images', { baseDir: BaseDirectory.AppLocalData });

如果目录不为空,必须将 recursive 选项设置为 true

import { remove, BaseDirectory } from '@tauri-apps/plugin-fs';
await remove('images', {
baseDir: BaseDirectory.AppLocalData,
recursive: true,
});

使用 exists() 函数检查目录是否存在。

import { exists, BaseDirectory } from '@tauri-apps/plugin-fs';
const tokenExists = await exists('images', {
baseDir: BaseDirectory.AppLocalData,
});

目录元数据可以通过 statlstat 函数检索。stat 会跟随符号链接(如果其指向的实际文件不在作用域允许范围内,则返回错误),而 lstat 不会跟随符号链接,而是返回符号链接本身的信息。

import { stat, BaseDirectory } from '@tauri-apps/plugin-fs';
const metadata = await stat('databases', {
baseDir: BaseDirectory.AppLocalData,
});

要监视目录或文件的变更,请使用 watchwatchImmediate 函数。

  • watch

    watch 进行了防抖动处理,因此它只会在一定的延迟后发出事件。

    import { watch, BaseDirectory } from '@tauri-apps/plugin-fs';
    await watch(
    'app.log',
    (event) => {
    console.log('app.log event', event);
    },
    {
    baseDir: BaseDirectory.AppLog,
    delayMs: 500,
    }
    );
  • watchImmediate

    watchImmediate 会立即通知监听者有关事件的消息。

    import { watchImmediate, BaseDirectory } from '@tauri-apps/plugin-fs';
    await watchImmediate(
    'logs',
    (event) => {
    console.log('logs directory event', event);
    },
    {
    baseDir: BaseDirectory.AppLog,
    recursive: true,
    }
    );

默认情况下,目录的监视操作不是递归的。将 recursive 选项设置为 true 可递归监视所有子目录的变更。

默认情况下,所有潜在危险的插件命令和范围都被阻止,无法访问。您必须修改 capabilities 配置中的权限才能启用这些功能。

有关更多信息,请参阅功能概述,并参阅分步指南以使用插件权限。

src-tauri/capabilities/default.json
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "main-capability",
"description": "Capability for the main window",
"windows": ["main"],
"permissions": [
"fs:default",
{
"identifier": "fs:allow-exists",
"allow": [{ "path": "$APPDATA/*" }]
}
]
}

默认权限

这组权限描述了 fs 插件默认启用或禁用的文件系统访问类型。

已授予权限

此默认权限集启用了对应用程序特定目录(AppConfig、AppData、AppLocalData、AppCache、AppLog)及其内创建的所有文件和子目录的读取访问权限。这些目录的位置取决于运行应用程序的操作系统。

通常,这些目录需要由应用程序在运行时手动创建,然后才能访问其中的文件或文件夹。

因此,也可以通过 mkdir 命令创建所有这些文件夹。

拒绝的权限

此默认权限集默认禁止访问 Tauri 应用程序的关键组件。在 Windows 上,禁止访问 webview 数据文件夹。

此默认权限集包括以下内容

  • create-app-specific-dirs
  • read-app-specific-dirs-recursive
  • deny-default

权限表

标识符 描述

fs:allow-app-read-recursive

这允许对完整的应用程序文件夹、文件和子目录进行完全递归读取访问。

fs:allow-app-write-recursive

这允许对完整的应用程序文件夹、文件和子目录进行完全递归写入访问。

fs:allow-app-read

这允许对应用程序文件夹进行非递归读取访问。

fs:allow-app-write

这允许对应用程序文件夹进行非递归写入访问。

fs:allow-app-meta-recursive

这允许对应用程序文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-app-meta

这允许对应用程序文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-app-recursive

此作用域允许递归访问完整的应用程序文件夹,包括子目录和文件。

fs:scope-app

此作用域允许访问所有文件并列出应用程序文件夹中顶级目录的内容。

fs:scope-app-index

此作用域允许列出应用程序目录中的所有文件和文件夹。

fs:allow-appcache-read-recursive

这允许对完整的 $APPCACHE 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-appcache-write-recursive

这允许对完整的 $APPCACHE 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-appcache-read

这允许对 $APPCACHE 文件夹进行非递归读取访问。

fs:allow-appcache-write

这允许对 $APPCACHE 文件夹进行非递归写入访问。

fs:allow-appcache-meta-recursive

这允许对 $APPCACHE 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-appcache-meta

这允许对 $APPCACHE 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-appcache-recursive

此作用域允许递归访问完整的 $APPCACHE 文件夹,包括子目录和文件。

fs:scope-appcache

此作用域允许访问所有文件并列出 $APPCACHE 文件夹中顶级目录的内容。

fs:scope-appcache-index

此作用域允许列出 $APPCACHE 文件夹中的所有文件和文件夹。

fs:allow-appconfig-read-recursive

这允许对完整的 $APPCONFIG 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-appconfig-write-recursive

这允许对完整的 $APPCONFIG 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-appconfig-read

这允许对 $APPCONFIG 文件夹进行非递归读取访问。

fs:allow-appconfig-write

这允许对 $APPCONFIG 文件夹进行非递归写入访问。

fs:allow-appconfig-meta-recursive

这允许对 $APPCONFIG 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-appconfig-meta

这允许对 $APPCONFIG 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-appconfig-recursive

此作用域允许递归访问完整的 $APPCONFIG 文件夹,包括子目录和文件。

fs:scope-appconfig

此作用域允许访问所有文件并列出 $APPCONFIG 文件夹中顶级目录的内容。

fs:scope-appconfig-index

此作用域允许列出 $APPCONFIG 文件夹中的所有文件和文件夹。

fs:allow-appdata-read-recursive

这允许对完整的 $APPDATA 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-appdata-write-recursive

这允许对完整的 $APPDATA 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-appdata-read

这允许对 $APPDATA 文件夹进行非递归读取访问。

fs:allow-appdata-write

这允许对 $APPDATA 文件夹进行非递归写入访问。

fs:allow-appdata-meta-recursive

这允许对 $APPDATA 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-appdata-meta

这允许对 $APPDATA 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-appdata-recursive

此作用域允许递归访问完整的 $APPDATA 文件夹,包括子目录和文件。

fs:scope-appdata

此作用域允许访问所有文件并列出 $APPDATA 文件夹中顶级目录的内容。

fs:scope-appdata-index

此作用域允许列出 $APPDATA 文件夹中的所有文件和文件夹。

fs:allow-applocaldata-read-recursive

这允许对完整的 $APPLOCALDATA 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-applocaldata-write-recursive

这允许对完整的 $APPLOCALDATA 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-applocaldata-read

这允许对 $APPLOCALDATA 文件夹进行非递归读取访问。

fs:allow-applocaldata-write

这允许对 $APPLOCALDATA 文件夹进行非递归写入访问。

fs:allow-applocaldata-meta-recursive

这允许对 $APPLOCALDATA 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-applocaldata-meta

这允许对 $APPLOCALDATA 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-applocaldata-recursive

此作用域允许递归访问完整的 $APPLOCALDATA 文件夹,包括子目录和文件。

fs:scope-applocaldata

此作用域允许访问所有文件并列出 $APPLOCALDATA 文件夹中顶级目录的内容。

fs:scope-applocaldata-index

此作用域允许列出 $APPLOCALDATA 文件夹中的所有文件和文件夹。

fs:allow-applog-read-recursive

这允许对完整的 $APPLOG 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-applog-write-recursive

这允许对完整的 $APPLOG 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-applog-read

这允许对 $APPLOG 文件夹进行非递归读取访问。

fs:allow-applog-write

这允许对 $APPLOG 文件夹进行非递归写入访问。

fs:allow-applog-meta-recursive

这允许对 $APPLOG 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-applog-meta

这允许对 $APPLOG 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-applog-recursive

此作用域允许递归访问完整的 $APPLOG 文件夹,包括子目录和文件。

fs:scope-applog

此作用域允许访问所有文件并列出 $APPLOG 文件夹中顶级目录的内容。

fs:scope-applog-index

此作用域允许列出 $APPLOG 文件夹中的所有文件和文件夹。

fs:allow-audio-read-recursive

这允许对完整的 $AUDIO 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-audio-write-recursive

这允许对完整的 $AUDIO 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-audio-read

这允许对 $AUDIO 文件夹进行非递归读取访问。

fs:allow-audio-write

这允许对 $AUDIO 文件夹进行非递归写入访问。

fs:allow-audio-meta-recursive

这允许对 $AUDIO 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-audio-meta

这允许对 $AUDIO 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-audio-recursive

此作用域允许递归访问完整的 $AUDIO 文件夹,包括子目录和文件。

fs:scope-audio

此作用域允许访问所有文件并列出 $AUDIO 文件夹中顶级目录的内容。

fs:scope-audio-index

此作用域允许列出 $AUDIO 文件夹中的所有文件和文件夹。

fs:allow-cache-read-recursive

这允许对完整的 $CACHE 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-cache-write-recursive

这允许对完整的 $CACHE 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-cache-read

这允许对 $CACHE 文件夹进行非递归读取访问。

fs:allow-cache-write

这允许对 $CACHE 文件夹进行非递归写入访问。

fs:allow-cache-meta-recursive

这允许对 $CACHE 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-cache-meta

这允许对 $CACHE 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-cache-recursive

此作用域允许递归访问完整的 $CACHE 文件夹,包括子目录和文件。

fs:scope-cache

此作用域允许访问所有文件并列出 $CACHE 文件夹中顶级目录的内容。

fs:scope-cache-index

此作用域允许列出 $CACHE 文件夹中的所有文件和文件夹。

fs:allow-config-read-recursive

这允许对完整的 $CONFIG 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-config-write-recursive

这允许对完整的 $CONFIG 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-config-read

这允许对 $CONFIG 文件夹进行非递归读取访问。

fs:allow-config-write

这允许对 $CONFIG 文件夹进行非递归写入访问。

fs:allow-config-meta-recursive

这允许对 $CONFIG 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-config-meta

这允许对 $CONFIG 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-config-recursive

此作用域允许递归访问完整的 $CONFIG 文件夹,包括子目录和文件。

fs:scope-config

此作用域允许访问所有文件并列出 $CONFIG 文件夹中顶级目录的内容。

fs:scope-config-index

此作用域允许列出 $CONFIG 文件夹中的所有文件和文件夹。

fs:allow-data-read-recursive

这允许对完整的 $DATA 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-data-write-recursive

这允许对完整的 $DATA 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-data-read

这允许对 $DATA 文件夹进行非递归读取访问。

fs:allow-data-write

这允许对 $DATA 文件夹进行非递归写入访问。

fs:allow-data-meta-recursive

这允许对 $DATA 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-data-meta

这允许对 $DATA 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-data-recursive

此作用域允许递归访问完整的 $DATA 文件夹,包括子目录和文件。

fs:scope-data

此作用域允许访问所有文件并列出 $DATA 文件夹中顶级目录的内容。

fs:scope-data-index

此作用域允许列出 $DATA 文件夹中的所有文件和文件夹。

fs:allow-desktop-read-recursive

这允许对完整的 $DESKTOP 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-desktop-write-recursive

这允许对完整的 $DESKTOP 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-desktop-read

这允许对 $DESKTOP 文件夹进行非递归读取访问。

fs:allow-desktop-write

这允许对 $DESKTOP 文件夹进行非递归写入访问。

fs:allow-desktop-meta-recursive

这允许对 $DESKTOP 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-desktop-meta

这允许对 $DESKTOP 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-desktop-recursive

此作用域允许递归访问完整的 $DESKTOP 文件夹,包括子目录和文件。

fs:scope-desktop

此作用域允许访问所有文件并列出 $DESKTOP 文件夹中顶级目录的内容。

fs:scope-desktop-index

此作用域允许列出 $DESKTOP 文件夹中的所有文件和文件夹。

fs:allow-document-read-recursive

这允许对完整的 $DOCUMENT 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-document-write-recursive

这允许对完整的 $DOCUMENT 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-document-read

这允许对 $DOCUMENT 文件夹进行非递归读取访问。

fs:allow-document-write

这允许对 $DOCUMENT 文件夹进行非递归写入访问。

fs:allow-document-meta-recursive

这允许对 $DOCUMENT 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-document-meta

这允许对 $DOCUMENT 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-document-recursive

此作用域允许递归访问完整的 $DOCUMENT 文件夹,包括子目录和文件。

fs:scope-document

此作用域允许访问所有文件并列出 $DOCUMENT 文件夹中顶级目录的内容。

fs:scope-document-index

此作用域允许列出 $DOCUMENT 文件夹中的所有文件和文件夹。

fs:allow-download-read-recursive

这允许对完整的 $DOWNLOAD 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-download-write-recursive

这允许对完整的 $DOWNLOAD 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-download-read

这允许对 $DOWNLOAD 文件夹进行非递归读取访问。

fs:allow-download-write

这允许对 $DOWNLOAD 文件夹进行非递归写入访问。

fs:allow-download-meta-recursive

这允许对 $DOWNLOAD 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-download-meta

这允许对 $DOWNLOAD 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-download-recursive

此作用域允许递归访问完整的 $DOWNLOAD 文件夹,包括子目录和文件。

fs:scope-download

此作用域允许访问所有文件并列出 $DOWNLOAD 文件夹中顶级目录的内容。

fs:scope-download-index

此作用域允许列出 $DOWNLOAD 文件夹中的所有文件和文件夹。

fs:allow-exe-read-recursive

这允许对完整的 $EXE 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-exe-write-recursive

这允许对完整的 $EXE 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-exe-read

这允许对 $EXE 文件夹进行非递归读取访问。

fs:allow-exe-write

这允许对 $EXE 文件夹进行非递归写入访问。

fs:allow-exe-meta-recursive

这允许对 $EXE 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-exe-meta

这允许对 $EXE 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-exe-recursive

此作用域允许递归访问完整的 $EXE 文件夹,包括子目录和文件。

fs:scope-exe

此作用域允许访问所有文件并列出 $EXE 文件夹中顶级目录的内容。

fs:scope-exe-index

此作用域允许列出 $EXE 文件夹中的所有文件和文件夹。

fs:allow-font-read-recursive

这允许对完整的 $FONT 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-font-write-recursive

这允许对完整的 $FONT 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-font-read

这允许对 $FONT 文件夹进行非递归读取访问。

fs:allow-font-write

这允许对 $FONT 文件夹进行非递归写入访问。

fs:allow-font-meta-recursive

这允许对 $FONT 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-font-meta

这允许对 $FONT 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-font-recursive

此作用域允许递归访问完整的 $FONT 文件夹,包括子目录和文件。

fs:scope-font

此作用域允许访问所有文件并列出 $FONT 文件夹中顶级目录的内容。

fs:scope-font-index

此作用域允许列出 $FONT 文件夹中的所有文件和文件夹。

fs:allow-home-read-recursive

这允许对完整的 $HOME 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-home-write-recursive

这允许对完整的 $HOME 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-home-read

这允许对 $HOME 文件夹进行非递归读取访问。

fs:allow-home-write

这允许对 $HOME 文件夹进行非递归写入访问。

fs:allow-home-meta-recursive

这允许对 $HOME 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-home-meta

这允许对 $HOME 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-home-recursive

此作用域允许递归访问完整的 $HOME 文件夹,包括子目录和文件。

fs:scope-home

此作用域允许访问所有文件并列出 $HOME 文件夹中顶级目录的内容。

fs:scope-home-index

此作用域允许列出 $HOME 文件夹中的所有文件和文件夹。

fs:allow-localdata-read-recursive

这允许对完整的 $LOCALDATA 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-localdata-write-recursive

这允许对完整的 $LOCALDATA 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-localdata-read

这允许对 $LOCALDATA 文件夹进行非递归读取访问。

fs:allow-localdata-write

这允许对 $LOCALDATA 文件夹进行非递归写入访问。

fs:allow-localdata-meta-recursive

这允许对 $LOCALDATA 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-localdata-meta

这允许对 $LOCALDATA 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-localdata-recursive

此作用域允许递归访问完整的 $LOCALDATA 文件夹,包括子目录和文件。

fs:scope-localdata

此作用域允许访问所有文件并列出 $LOCALDATA 文件夹中顶级目录的内容。

fs:scope-localdata-index

此作用域允许列出 $LOCALDATA 文件夹中的所有文件和文件夹。

fs:allow-log-read-recursive

这允许对完整的 $LOG 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-log-write-recursive

这允许对完整的 $LOG 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-log-read

这允许对 $LOG 文件夹进行非递归读取访问。

fs:allow-log-write

这允许对 $LOG 文件夹进行非递归写入访问。

fs:allow-log-meta-recursive

这允许对 $LOG 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-log-meta

这允许对 $LOG 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-log-recursive

此作用域允许递归访问完整的 $LOG 文件夹,包括子目录和文件。

fs:scope-log

此作用域允许访问所有文件并列出 $LOG 文件夹中顶级目录的内容。

fs:scope-log-index

此作用域允许列出 $LOG 文件夹中的所有文件和文件夹。

fs:allow-picture-read-recursive

这允许对完整的 $PICTURE 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-picture-write-recursive

这允许对完整的 $PICTURE 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-picture-read

这允许对 $PICTURE 文件夹进行非递归读取访问。

fs:allow-picture-write

这允许对 $PICTURE 文件夹进行非递归写入访问。

fs:allow-picture-meta-recursive

这允许对 $PICTURE 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-picture-meta

这允许对 $PICTURE 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-picture-recursive

此作用域允许递归访问完整的 $PICTURE 文件夹,包括子目录和文件。

fs:scope-picture

此作用域允许访问所有文件并列出 $PICTURE 文件夹中顶级目录的内容。

fs:scope-picture-index

此作用域允许列出 $PICTURE 文件夹中的所有文件和文件夹。

fs:allow-public-read-recursive

这允许对完整的 $PUBLIC 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-public-write-recursive

这允许对完整的 $PUBLIC 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-public-read

这允许对 $PUBLIC 文件夹进行非递归读取访问。

fs:allow-public-write

这允许对 $PUBLIC 文件夹进行非递归写入访问。

fs:allow-public-meta-recursive

这允许对 $PUBLIC 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-public-meta

这允许对 $PUBLIC 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-public-recursive

此作用域允许递归访问完整的 $PUBLIC 文件夹,包括子目录和文件。

fs:scope-public

此作用域允许访问所有文件并列出 $PUBLIC 文件夹中顶级目录的内容。

fs:scope-public-index

此作用域允许列出 $PUBLIC 文件夹中的所有文件和文件夹。

fs:allow-resource-read-recursive

这允许对完整的 $RESOURCE 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-resource-write-recursive

这允许对完整的 $RESOURCE 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-resource-read

这允许对 $RESOURCE 文件夹进行非递归读取访问。

fs:allow-resource-write

这允许对 $RESOURCE 文件夹进行非递归写入访问。

fs:allow-resource-meta-recursive

这允许对 $RESOURCE 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-resource-meta

这允许对 $RESOURCE 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-resource-recursive

此作用域允许递归访问完整的 $RESOURCE 文件夹,包括子目录和文件。

fs:scope-resource

此作用域允许访问所有文件并列出 $RESOURCE 文件夹中顶级目录的内容。

fs:scope-resource-index

此作用域允许列出 $RESOURCE 文件夹中的所有文件和文件夹。

fs:allow-runtime-read-recursive

这允许对完整的 $RUNTIME 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-runtime-write-recursive

这允许对完整的 $RUNTIME 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-runtime-read

这允许对 $RUNTIME 文件夹进行非递归读取访问。

fs:allow-runtime-write

这允许对 $RUNTIME 文件夹进行非递归写入访问。

fs:allow-runtime-meta-recursive

这允许对 $RUNTIME 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-runtime-meta

这允许对 $RUNTIME 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-runtime-recursive

此作用域允许递归访问完整的 $RUNTIME 文件夹,包括子目录和文件。

fs:scope-runtime

此作用域允许访问所有文件并列出 $RUNTIME 文件夹中顶级目录的内容。

fs:scope-runtime-index

此作用域允许列出 $RUNTIME 文件夹中的所有文件和文件夹。

fs:allow-temp-read-recursive

这允许对完整的 $TEMP 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-temp-write-recursive

这允许对完整的 $TEMP 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-temp-read

这允许对 $TEMP 文件夹进行非递归读取访问。

fs:allow-temp-write

这允许对 $TEMP 文件夹进行非递归写入访问。

fs:allow-temp-meta-recursive

这允许对 $TEMP 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-temp-meta

这允许对 $TEMP 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-temp-recursive

此作用域允许递归访问完整的 $TEMP 文件夹,包括子目录和文件。

fs:scope-temp

此作用域允许访问所有文件并列出 $TEMP 文件夹中顶级目录的内容。

fs:scope-temp-index

此作用域允许列出 $TEMP 文件夹中的所有文件和文件夹。

fs:allow-template-read-recursive

这允许对完整的 $TEMPLATE 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-template-write-recursive

这允许对完整的 $TEMPLATE 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-template-read

这允许对 $TEMPLATE 文件夹进行非递归读取访问。

fs:allow-template-write

这允许对 $TEMPLATE 文件夹进行非递归写入访问。

fs:allow-template-meta-recursive

这允许对 $TEMPLATE 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-template-meta

这允许对 $TEMPLATE 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-template-recursive

此作用域允许递归访问完整的 $TEMPLATE 文件夹,包括子目录和文件。

fs:scope-template

此作用域允许访问所有文件并列出 $TEMPLATE 文件夹中顶级目录的内容。

fs:scope-template-index

此作用域允许列出 $TEMPLATE 文件夹中的所有文件和文件夹。

fs:allow-video-read-recursive

这允许对完整的 $VIDEO 文件夹、文件和子目录进行完全递归读取访问。

fs:allow-video-write-recursive

这允许对完整的 $VIDEO 文件夹、文件和子目录进行完全递归写入访问。

fs:allow-video-read

这允许对 $VIDEO 文件夹进行非递归读取访问。

fs:allow-video-write

这允许对 $VIDEO 文件夹进行非递归写入访问。

fs:allow-video-meta-recursive

这允许对 $VIDEO 文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。

fs:allow-video-meta

这允许对 $VIDEO 文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。

fs:scope-video-recursive

此作用域允许递归访问完整的 $VIDEO 文件夹,包括子目录和文件。

fs:scope-video

此作用域允许访问 $VIDEO 文件夹中的所有文件并列出顶层目录的内容。

fs:scope-video-index

此作用域允许列出 $VIDEO 文件夹中的所有文件和文件夹。

fs:allow-copy-file

在没有任何预配置作用域的情况下启用 copy_file 命令。

fs:deny-copy-file

在没有任何预配置作用域的情况下拒绝 copy_file 命令。

fs:allow-create

在没有任何预配置作用域的情况下启用 create 命令。

fs:deny-create

在没有任何预配置作用域的情况下拒绝 create 命令。

fs:allow-exists

在没有任何预配置作用域的情况下启用 exists 命令。

fs:deny-exists

在没有任何预配置作用域的情况下拒绝 exists 命令。

fs:allow-fstat

在没有任何预配置作用域的情况下启用 fstat 命令。

fs:deny-fstat

在没有任何预配置作用域的情况下拒绝 fstat 命令。

fs:allow-ftruncate

在没有任何预配置作用域的情况下启用 ftruncate 命令。

fs:deny-ftruncate

在没有任何预配置作用域的情况下拒绝 ftruncate 命令。

fs:allow-lstat

在没有任何预配置作用域的情况下启用 lstat 命令。

fs:deny-lstat

在没有任何预配置作用域的情况下拒绝 lstat 命令。

fs:allow-mkdir

在没有任何预配置作用域的情况下启用 mkdir 命令。

fs:deny-mkdir

在没有任何预配置作用域的情况下拒绝 mkdir 命令。

fs:allow-open

启用打开命令,不带任何预配置范围。

fs:deny-open

禁用打开命令,不带任何预配置范围。

fs:allow-read

在没有任何预配置作用域的情况下启用 read 命令。

fs:deny-read

在没有任何预配置作用域的情况下拒绝 read 命令。

fs:allow-read-dir

在没有任何预配置作用域的情况下启用 read_dir 命令。

fs:deny-read-dir

在没有任何预配置作用域的情况下拒绝 read_dir 命令。

fs:allow-read-file

在没有任何预配置作用域的情况下启用 read_file 命令。

fs:deny-read-file

在没有任何预配置作用域的情况下拒绝 read_file 命令。

fs:allow-read-text-file

在没有任何预配置作用域的情况下启用 read_text_file 命令。

fs:deny-read-text-file

在没有任何预配置作用域的情况下拒绝 read_text_file 命令。

fs:allow-read-text-file-lines

在没有任何预配置作用域的情况下启用 read_text_file_lines 命令。

fs:deny-read-text-file-lines

在没有任何预配置作用域的情况下拒绝 read_text_file_lines 命令。

fs:allow-read-text-file-lines-next

在没有任何预配置作用域的情况下启用 read_text_file_lines_next 命令。

fs:deny-read-text-file-lines-next

在没有任何预配置作用域的情况下拒绝 read_text_file_lines_next 命令。

fs:allow-remove

在没有任何预配置作用域的情况下启用 remove 命令。

fs:deny-remove

在没有任何预配置作用域的情况下拒绝 remove 命令。

fs:allow-rename

在没有任何预配置作用域的情况下启用 rename 命令。

fs:deny-rename

在没有任何预配置作用域的情况下拒绝 rename 命令。

fs:allow-seek

在没有任何预配置作用域的情况下启用 seek 命令。

fs:deny-seek

在没有任何预配置作用域的情况下拒绝 seek 命令。

fs:allow-size

在没有任何预配置作用域的情况下启用 size 命令。

fs:deny-size

在没有任何预配置作用域的情况下拒绝 size 命令。

fs:allow-start-accessing-security-scoped-resource

在没有任何预配置作用域的情况下启用 start_accessing_security_scoped_resource 命令。

fs:deny-start-accessing-security-scoped-resource

在没有任何预配置作用域的情况下拒绝 start_accessing_security_scoped_resource 命令。

fs:allow-stat

在没有任何预配置作用域的情况下启用 stat 命令。

fs:deny-stat

在没有任何预配置作用域的情况下拒绝 stat 命令。

fs:allow-stop-accessing-security-scoped-resource

在没有任何预配置作用域的情况下启用 stop_accessing_security_scoped_resource 命令。

fs:deny-stop-accessing-security-scoped-resource

在没有任何预配置作用域的情况下拒绝 stop_accessing_security_scoped_resource 命令。

fs:allow-truncate

在没有任何预配置作用域的情况下启用 truncate 命令。

fs:deny-truncate

在没有任何预配置作用域的情况下拒绝 truncate 命令。

fs:allow-unwatch

在没有任何预配置作用域的情况下启用 unwatch 命令。

fs:deny-unwatch

在没有任何预配置作用域的情况下拒绝 unwatch 命令。

fs:allow-watch

在没有任何预配置作用域的情况下启用 watch 命令。

fs:deny-watch

在没有任何预配置作用域的情况下拒绝 watch 命令。

fs:allow-write

在没有任何预配置作用域的情况下启用 write 命令。

fs:deny-write

在没有任何预配置作用域的情况下拒绝 write 命令。

fs:allow-write-file

在没有任何预配置作用域的情况下启用 write_file 命令。

fs:deny-write-file

在没有任何预配置作用域的情况下拒绝 write_file 命令。

fs:allow-write-text-file

在没有任何预配置作用域的情况下启用 write_text_file 命令。

fs:deny-write-text-file

在没有任何预配置作用域的情况下拒绝 write_text_file 命令。

fs:create-app-specific-dirs

此权限允许创建应用程序特定的目录。

fs:deny-default

默认拒绝访问危险的 Tauri 相关文件和文件夹。

fs:deny-webview-data-linux

此选项在 Linux 上拒绝读取 $APPLOCALDATA 文件夹,因为 webview 数据和配置值存储在此处。允许访问可能导致敏感信息泄露,应慎重考虑。

fs:deny-webview-data-windows

此选项在 Windows 上拒绝读取 $APPLOCALDATA/EBWebView 文件夹,因为 webview 数据和配置值存储在此处。允许访问可能导致敏感信息泄露,应慎重考虑。

fs:read-all

在没有任何预配置可访问路径的情况下启用所有与读取相关的命令。

fs:read-app-specific-dirs-recursive

此权限允许对应用程序特定的基础目录进行递归读取操作。

fs:read-dirs

在没有任何预配置可访问路径的情况下启用目录读取和文件元数据相关命令。

fs:read-files

在没有任何预配置可访问路径的情况下启用与文件读取相关的命令。

fs:read-meta

在没有任何预配置可访问路径的情况下启用所有与索引或元数据相关的命令。

fs:scope

一个可用于修改全局作用域的空权限。

示例

{
  "identifier": "read-documents",
  "windows": ["main"],
  "permissions": [
    "fs:allow-read",
    {
      "identifier": "fs:scope",
      "allow": [
        "$APPDATA/documents/**/*"
      ],
      "deny": [
        "$APPDATA/documents/secret.txt"
      ]
    }
  ]
}

fs:write-all

在没有任何预配置可访问路径的情况下启用所有与写入相关的命令。

fs:write-files

在没有任何预配置可访问路径的情况下启用所有与文件写入相关的命令。

此插件权限包含用于定义哪些路径被允许或明确拒绝的作用域。有关作用域的更多信息,请参阅 命令作用域

每个 allowdeny 作用域必须包含一个列表,列出所有应该被允许或拒绝的路径。作用域条目的格式为 { path: string }

作用域条目可以使用 $<path> 变量来引用常见的系统路径,例如主目录、应用程序资源目录和配置目录。下表列出了您可以引用的所有公共路径。

路径变量
appConfigDir$APPCONFIG
appDataDir$APPDATA
appLocalDataDir$APPLOCALDATA
appcacheDir$APPCACHE
applogDir$APPLOG
audioDir$AUDIO
cacheDir$CACHE
configDir$CONFIG
dataDir$DATA
localDataDir$LOCALDATA
desktopDir$DESKTOP
documentDir$DOCUMENT
downloadDir$DOWNLOAD
executableDir$EXE
fontDir$FONT
homeDir$HOME
pictureDir$PICTURE
publicDir$PUBLIC
runtimeDir$RUNTIME
templateDir$TEMPLATE
videoDir$VIDEO
resourceDir$RESOURCE
tempDir$TEMP
  • 全局作用域

要将作用域应用于任何 fs 命令,请使用 fs:scope 权限。

src-tauri/capabilities/default.json
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "main-capability",
"description": "Capability for the main window",
"windows": ["main"],
"permissions": [
{
"identifier": "fs:scope",
"allow": [{ "path": "$APPDATA" }, { "path": "$APPDATA/**/*" }]
}
]
}

要将作用域应用于特定的 fs 命令,请使用对象形式的权限 { "identifier": string, "allow"?: [], "deny"?: [] }

src-tauri/capabilities/default.json
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "main-capability",
"description": "Capability for the main window",
"windows": ["main"],
"permissions": [
{
"identifier": "fs:allow-rename",
"allow": [{ "path": "$HOME/**/*" }]
},
{
"identifier": "fs:allow-rename",
"deny": [{ "path": "$HOME/.config/**/*" }]
},
{
"identifier": "fs:allow-exists",
"allow": [{ "path": "$APPDATA/*" }]
}
]
}

在上述示例中,您可以使用 $APPDATA 的任何子路径(不包括子目录)来使用 exists API,以及 rename


© 2026 Tauri 贡献者。CC-BY / MIT