文件系统
访问文件系统。
此插件需要 Rust 版本至少为 **1.77.2**
| 平台 | 级别 | 备注 |
|---|---|---|
| windows | 通过 MSI 或 NSIS 在 | |
| linux | 对 | |
| macos | 对 | |
| android | | 默认情况下访问权限被限制在应用程序文件夹内 |
| ios | | 默认情况下访问权限被限制在应用程序文件夹内 |
安装 fs 插件以开始使用。
使用你的项目包管理器添加依赖项
npm run tauri add fsyarn run tauri add fspnpm tauri add fsdeno task tauri add fsbun tauri add fscargo tauri add fs-
在
src-tauri文件夹中运行以下命令,将插件添加到项目的Cargo.toml依赖项中cargo add tauri-plugin-fs -
修改
lib.rs以初始化插件src-tauri/src/lib.rs #[cfg_attr(mobile, tauri::mobile_entry_point)]pub fn run() {tauri::Builder::default().plugin(tauri_plugin_fs::init()).run(tauri::generate_context!()).expect("error while running tauri application");} -
使用您首选的 JavaScript 包管理器安装 JavaScript 访客绑定
npm install @tauri-apps/plugin-fsyarn add @tauri-apps/plugin-fspnpm add @tauri-apps/plugin-fsdeno add npm:@tauri-apps/plugin-fsbun add @tauri-apps/plugin-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 文件夹中创建一个 文件,并包含所需的 NSPrivacyAccessedAPICategoryFileTimestamp 键和 C617.1 推荐原因。PrivacyInfo.xcprivacy
<?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 existsawait exists('avatar.png', { baseDir: BaseDirectory.AppData });use tauri_plugin_fs::FsExt;
#[cfg_attr(mobile, tauri::mobile_entry_point)]pub fn run() { tauri::Builder::default() .plugin(tauri_plugin_fs::init()) .setup(|app| { // allowed the given directory let scope = app.fs_scope(); scope.allow_directory("/path/to/directory", false); dbg!(scope.allowed());
Ok(()) }) .run(tauri::generate_context!()) .expect("error while running tauri application");}该模块可防止路径遍历,不允许使用父目录访问符(即不允许使用“/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 arrayawait 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 } -
截断
当设置了
选项且文件已存在时,它将被截断为长度 0。truncateimport { 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 -
创建
默认情况下,
API 仅打开现有文件。要实现“如果文件不存在则创建,如果存在则打开”,请将open设置为create。trueimport { 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();为了创建文件,
或write也必须设置为append。true如果要在文件已存在时失败,请参阅
。createNew -
createNew
的工作方式类似于createNew,但如果文件已存在,它将失败。createimport { 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,});如果文件较大,你可以使用
API 流式处理其行内容。readTextFileLinesimport { 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,});文件元数据可以通过 和 stat 函数检索。lstat 会跟随符号链接(如果其指向的实际文件不在作用域允许范围内,则返回错误),而 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,});目录元数据可以通过 和 stat 函数检索。lstat 会跟随符号链接(如果其指向的实际文件不在作用域允许范围内,则返回错误),而 stat 不会跟随符号链接,而是返回符号链接本身的信息。lstat
import { stat, BaseDirectory } from '@tauri-apps/plugin-fs';const metadata = await stat('databases', { baseDir: BaseDirectory.AppLocalData,});要监视目录或文件的变更,请使用 或 watch 函数。watchImmediate
-
watch
进行了防抖动处理,因此它只会在一定的延迟后发出事件。watchimport { watch, BaseDirectory } from '@tauri-apps/plugin-fs';await watch('app.log',(event) => {console.log('app.log event', event);},{baseDir: BaseDirectory.AppLog,delayMs: 500,}); -
watchImmediate
会立即通知监听者有关事件的消息。watchImmediateimport { 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 配置中的权限才能启用这些功能。
有关更多信息,请参阅功能概述,并参阅分步指南以使用插件权限。
{ "$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-dirsread-app-specific-dirs-recursivedeny-default
权限表
| 标识符 | 描述 |
|---|---|
|
|
这允许对完整的应用程序文件夹、文件和子目录进行完全递归读取访问。 |
|
|
这允许对完整的应用程序文件夹、文件和子目录进行完全递归写入访问。 |
|
|
这允许对应用程序文件夹进行非递归读取访问。 |
|
|
这允许对应用程序文件夹进行非递归写入访问。 |
|
|
这允许对应用程序文件夹的元数据进行完全递归读取访问,包括文件列表和统计信息。 |
|
|
这允许对应用程序文件夹的元数据进行非递归读取访问,包括文件列表和统计信息。 |
|
|
此作用域允许递归访问完整的应用程序文件夹,包括子目录和文件。 |
|
|
此作用域允许访问所有文件并列出应用程序文件夹中顶级目录的内容。 |
|
|
此作用域允许列出应用程序目录中的所有文件和文件夹。 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问所有文件并列出 |
|
|
此作用域允许列出 |
|
|
这允许对完整的 |
|
|
这允许对完整的 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
这允许对 |
|
|
此作用域允许递归访问完整的 |
|
|
此作用域允许访问 |
|
|
此作用域允许列出 |
|
|
在没有任何预配置作用域的情况下启用 copy_file 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 copy_file 命令。 |
|
|
在没有任何预配置作用域的情况下启用 create 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 create 命令。 |
|
|
在没有任何预配置作用域的情况下启用 exists 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 exists 命令。 |
|
|
在没有任何预配置作用域的情况下启用 fstat 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 fstat 命令。 |
|
|
在没有任何预配置作用域的情况下启用 ftruncate 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 ftruncate 命令。 |
|
|
在没有任何预配置作用域的情况下启用 lstat 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 lstat 命令。 |
|
|
在没有任何预配置作用域的情况下启用 mkdir 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 mkdir 命令。 |
|
|
启用打开命令,不带任何预配置范围。 |
|
|
禁用打开命令,不带任何预配置范围。 |
|
|
在没有任何预配置作用域的情况下启用 read 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 read 命令。 |
|
|
在没有任何预配置作用域的情况下启用 read_dir 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 read_dir 命令。 |
|
|
在没有任何预配置作用域的情况下启用 read_file 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 read_file 命令。 |
|
|
在没有任何预配置作用域的情况下启用 read_text_file 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 read_text_file 命令。 |
|
|
在没有任何预配置作用域的情况下启用 read_text_file_lines 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 read_text_file_lines 命令。 |
|
|
在没有任何预配置作用域的情况下启用 read_text_file_lines_next 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 read_text_file_lines_next 命令。 |
|
|
在没有任何预配置作用域的情况下启用 remove 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 remove 命令。 |
|
|
在没有任何预配置作用域的情况下启用 rename 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 rename 命令。 |
|
|
在没有任何预配置作用域的情况下启用 seek 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 seek 命令。 |
|
|
在没有任何预配置作用域的情况下启用 size 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 size 命令。 |
|
|
在没有任何预配置作用域的情况下启用 start_accessing_security_scoped_resource 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 start_accessing_security_scoped_resource 命令。 |
|
|
在没有任何预配置作用域的情况下启用 stat 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 stat 命令。 |
|
|
在没有任何预配置作用域的情况下启用 stop_accessing_security_scoped_resource 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 stop_accessing_security_scoped_resource 命令。 |
|
|
在没有任何预配置作用域的情况下启用 truncate 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 truncate 命令。 |
|
|
在没有任何预配置作用域的情况下启用 unwatch 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 unwatch 命令。 |
|
|
在没有任何预配置作用域的情况下启用 watch 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 watch 命令。 |
|
|
在没有任何预配置作用域的情况下启用 write 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 write 命令。 |
|
|
在没有任何预配置作用域的情况下启用 write_file 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 write_file 命令。 |
|
|
在没有任何预配置作用域的情况下启用 write_text_file 命令。 |
|
|
在没有任何预配置作用域的情况下拒绝 write_text_file 命令。 |
|
|
此权限允许创建应用程序特定的目录。 |
|
|
默认拒绝访问危险的 Tauri 相关文件和文件夹。 |
|
|
此选项在 Linux 上拒绝读取 |
|
|
此选项在 Windows 上拒绝读取 |
|
|
在没有任何预配置可访问路径的情况下启用所有与读取相关的命令。 |
|
|
此权限允许对应用程序特定的基础目录进行递归读取操作。 |
|
|
在没有任何预配置可访问路径的情况下启用目录读取和文件元数据相关命令。 |
|
|
在没有任何预配置可访问路径的情况下启用与文件读取相关的命令。 |
|
|
在没有任何预配置可访问路径的情况下启用所有与索引或元数据相关的命令。 |
|
|
一个可用于修改全局作用域的空权限。 示例
|
|
|
在没有任何预配置可访问路径的情况下启用所有与写入相关的命令。 |
|
|
在没有任何预配置可访问路径的情况下启用所有与文件写入相关的命令。 |
此插件权限包含用于定义哪些路径被允许或明确拒绝的作用域。有关作用域的更多信息,请参阅 命令作用域。
每个 allow 或 deny 作用域必须包含一个列表,列出所有应该被允许或拒绝的路径。作用域条目的格式为 { 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 权限。
{ "$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"?: [] }。
{ "$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