跳到内容
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 访问的路径必须相对于 base directories 之一,或者通过 path API 创建。

有关更多信息,请参阅 @tauri-apps/plugin-fs - Security

文件系统插件提供了两种操作路径的方式:基本目录路径 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();

    此选项要求 write 设置为 true

    如果想通过多次 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,
});

在上面的示例中,/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 是防抖的,因此它只会在一定的延迟后发出事件

    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-stat

启用 stat 命令,无需任何预配置范围。

fs:deny-stat

禁用 stat 命令,无需任何预配置范围。

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

您可以用来修改全局范围的空权限。

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/*" }]
}
]
}

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


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