本文翻译自vtk官方文档:vtk_file_format
文末有链接

VTK提供了许多源对象和编写器对象,用于读取和写入流行的数据文件格式,此外,VTK也提供了自己的文件格式。创建一种数据文件格式的主要原因是为各种数据集类型提供一致的数据表示方案,并提供一种在软件之间通信数据的简单方法。只要有可能,我们建议您使用更广泛的格式,但如果这不可能,则可以改用本文介绍的格式。请注意,这些格式可能不会得到许多其他工具的支持。

VTK中有两种不同样式的文件格式。 最简单的是传统的串行格式,可以通过手工或程序轻松读取和写入,但是,这些格式的灵活性不如本节稍后介绍的基于XML的文件格式。 XML格式支持随机访问,并行I / O和可移植数据压缩,在可能的情况下,优先考虑此格式。

传统简单格式

传统VTK文件格式包含五个基本部分:

1. 第一部分是文件版本和标识符。 这部分包含单行# vtk DataFile Version x.x ,该行必须与显示的完全相同,但版本号x.x除外,该版本号会因VTK的不同发行版而变化。(注意:当前版本是3.0。版本1.0和2.0文件与版本3.0是兼容的)

2. 第二部分是标题。标题由以行尾字符n终止的字符串组成。最大为256个字符,可用于描述数据并包括任何其他相关信息。

3. 下一部分是文件格式。文件格式描述文件的类型,可以是ASCII或二进制。 在此行上,必须出现单个单词ASCIIBINARY

4. 第四部分是数据集结构。几何部分描述了数据集的几何和拓扑。这部分以包含关键字DATASET的行开头,后跟描述数据集类型的关键字。然后,根据数据集的类型,其他关键字/数据组合将定义实际数据。

5. 最后一部分描述了数据集属性。 这部分以关键字POINT_DATACELL_DATA开头,后跟一个整数,分别指定点或单元的数量。(先出现POINT_DATA还是CELL_DATA都没关系)。然后,其他关键字/数据组合定义实际的数据集属性值(即标量,向量,张量,法线,纹理坐标或字段数据)。

文件格式的概述如图1所示。前三个部分是必需的,而另两个部分是可选的。因此,您可以通过操作系统文件或使用VTK过滤器合并数据,灵活地混合与匹配几何、数据集属性。关键字不区分大小写,可以用空格分隔。

图1 VTK数据文件格式的五个部分的概述

在描述数据文件格式之前,请注意以下几点。

  • dataTypebit,unsigned_char,char,unsigned_short,short,unsigned_int,int,unsigned_long,long,floatdouble的类型之一。这些关键字用于描述数据的形式,既可以从文件中读取,也可以构造适当的内部对象。并非所有类都支持所有数据类型。
  • 无论文件是二进制文件还是ASCII文件,所有关键字词组均以ASCII形式编写。
  • 文件的二进制部分(如果是二进制形式)是适当的数据;即定义点坐标,标量,像元索引等的数字。
  • 索引为0偏移。因此,第一个点是点ID为0。
  • 如果文件中同时存在数据属性和几何/拓扑部分,则数据属性部分中定义的数据值的数量必须与几何/拓扑部分中定义的点或单元的数量完全匹配。
  • 单元格类型和索引的类型为int。
  • 二进制数据必须立即放在上一个ASCII关键字和参数序列中的“换行符”( n)字符之后。
  • 几何/拓扑描述必须先于数据属性描述。

二进制文件

只要遵守两个条件,VTK中的二进制文件即可在不同的计算机系统之间移植。首先,确保数据的字节顺序正确,其次,确保每种数据类型的长度一致。

大多数时候,VTK会为您管理二进制文件的字节顺序。当您在一台计算机上写入二进制文件并从另一台计算机读取该文件时,表示数据的字节将根据需要自动交换。例如,在Sun上写入的二进制文件以大字节序存储,而在PC上的二进制文件则以小字节序存储。因此,在PC上读取时,写在Sun工作站上的文件需要字节交换。(有关实现的详细信息,请参见类vtkByteSwap)此处描述的VTK数据文件以大端格式书写。

但是,某些文件格式未明确定义字节顺序形式。您会发现由外部程序或类vtkVolume16ReadervtkMCubesReadervtkMCubesWriter读取或写入的数据可能具有不同的字节顺序,具体取决于原始系统。在这种情况下,VTK允许您使用方法指定字节顺序:

SetDataByteOrderToBigEndian()
SetDataByteOrderToLittleEndian()

二进制文件的另一个问题是系统可能使用不同数量的字节来表示整数或其他本机类型。例如,某些64位系统将表示一个8字节的整数,而另一些系统将表示一个4字节的整数。当前,VTK无法处理跨数据长度不兼容的系统中的二进制文件传输。 在这种情况下,请改用ASCII文件格式。

数据集格式(Dataset Format)

可视化工具包支持五种不同的数据集格式:结构化点(structured points)、结构化网格(structured grid)、直线型网格(rectilinear grid)、非结构化网格(unstructured grid)和多边形数据(polygonal data)。具有隐式拓扑的数据(结构化数据,例如vtkImageData和vtkStructuredGrid)的顺序是x增长最快,然后是y,然后是z。

这些格式如下:

  • 结构化点(structured points):

文件格式支持1D,2D和3D结构化点数据集。尺寸nxnynz必须大于或等于1。数据间距sxsysz必须大于0。(注意:在1.0版数据文件中,间距称为“纵横比”。ASPECT_RATIO仍可以在2.0版数据文件中使用,但不建议使用。)

DATASET STRUCTURED_POINTS
DIMENSIONS nx ny nz
ORIGIN xyz
SPACING sx sy sz

  • 结构化网格(structured grid):

该文件格式支持1D,2D和3D结构化网格数据集。尺寸nxnynz必须大于或等于1。点坐标由POINTS部分中的数据定义。这由每个点的x-y-z坐标数据值组成。

DATASET STRUCTURED_GRID
DIMENSIONS nx ny nz
POINTS n dataType
p0x p0y p0z
p1x p1y p1z
...
p(n-1)x p(n-1)y p(n-1)z

  • 直线网格(Rectilinear Grid):

直线网格定义具有规则拓扑和沿x-y-z坐标轴对齐的半规则几何的数据集。几何形状由三个单调递增的坐标值列表定义,每个x-y-z坐标轴都有一个列表。 通过指定网格尺寸(必须大于或等于1)来定义拓扑。

DATASET RECTILINEAR_GRID
DIMENSIONS nx ny nz
X_COORDINATES nx dataType
x0 x1 ... x(nx-1)
Y_COORDINATES ny dataType
y0 y1 ... y(ny-1)
Z_COORDINATES nz dataType
z0 z1 ... z(nz-1)

  • 多边形数据(Polygonal Data)

多边形数据集由曲面图形基元顶点(和多顶点),线(和折线),多边形(各种类型)和三角形带的任意组合组成。多边形数据由POINTSVERTICESLINESPOLYGONSTRIANGLE_STRIPS部分定义。POINTS定义与我们看到的结构化网格数据集相同。VERTICESLINESPOLYGONSTRIANGLE_STRIPS关键字定义多边形数据集拓扑。

这些关键字中的每一个都需要两个参数:单元数n和单元列表大小的size。单元列表大小是表示列表所需的整数值的总数(即,每个单元上的numPoints和连接性索引的总和)。关键字VERTICESLINESPOLYGONSTRIANGLE_STRIPS是可选的。

DATASET POLYDATA
POINTS n dataType
p0x p0y p0z
p1x p1y p1z
...
p(n-1)x p(n-1)y p(n-1)z
VERTICES n size
numPoints0, i0, j0, k0, ...
numPoints1, i1, j1, k1, ...
...
numPointsn-1, in-1, jn-1, kn-1, ...
LINES n size
numPoints0, i0, j0, k0, ...
numPoints1, i1, j1, k1, ...
...
numPointsn-1, in-1, jn-1, kn-1, ...
POLYGONS n size
numPoints0, i0, j0, k0, ...
numPoints1, i1, j1, k1, ...
...
numPointsn-1, in-1, jn-1, kn-1, ...
TRIANGLE_STRIPS n size
numPoints0, i0, j0, k0, ...
numPoints1, i1, j1, k1, ...
...
numPointsn-1, in-1, jn-1, kn-1, ...

  • 非结构化网格(Unstructured Grid)

非结构化网格数据集由任何可能单元类型的任意组合组成。由点points、单元cells和单元类型cell_types定义。

cells关键字需要两个参数:单元数n和单元列表大小的大小。单元列表大小是表示列表所需的整数值的总数(即,每个单元上的numPoints和连接性索引的总和)。CELL_TYPES关键字需要一个参数:单元数n。该值应与CELLS关键字指定的值匹配。单元类型数据是为各个单元类型的指定单个整数值(请参阅vtkCell.h或图2)

DATASET UNSTRUCTURED_GRID
POINTS n dataType
p0x p0y p0z
p1x p1y p1z
...
p(n-1)x p(n-1)y p(n-1)z
CELLS n size
numPoints0, i, j, k, l, ...
numPoints1, i, j, k, l, ...
numPoints2, i, j, k, l, ...
...
numPointsn-1, i, j, k, l, ...
CELL_TYPES n
type0
type1
type2
...
typen-1

  • 场数据

场数据是没有拓扑和几何结构,也没有特定维度的通用格式。通常,场数据与数据集的点或单元关联。但是,如果将FIELD类型指定为数据集类型(参见图1),则将定义常规VTK数据对象。使用下一部分中描述的格式来定义字段。

数据集属性格式

VTK支持以下数据集属性:标量(1到4个分量),向量,法线,纹理坐标(1D,2D和3D),张量和字段数据。另外,还可以定义使用RGBA颜色规范的查找表,并与标量数据相关联。点和单元都支持数据集属性。

每种类型的属性数据都有一个与之关联的dataName。这是用于标识特定数据的字符串(无嵌入空格)。VTK读取器使用dataName提取数据。结果,一个文件中可以包含多个相同类型的属性数据。例如,在数据集点上定义的两个不同的标量字段(压力和温度)可以包含在同一文件中。(如果未在VTK读取器中指定适当的dataName,则将从文件中提取该类型的第一个数据。)

  • 标量

标量定义包括查找表的规范。查找表的定义是可选的。如果未指定,将使用默认的VTK表(tableName为“default”)。另请注意,numComp变量是可选的,默认情况下组件的数量等于1。(参数numComp必须介于[1,4]之间;在vtk2.3之前的VTK版本中,不支持此参数。)

SCALARS dataName dataType numComp
LOOKUP_TABLE tableName
s0
s1
...
sn-1

颜色标量(即直接映射到颜色的无符号字符值)的定义根据每个标量的值(nvalue)的数量而变化。如果文件格式是ASCII,则颜色标量是使用(0,1)之间的nValues浮点值定义的。如果文件格式为BINARY,则数据流由nValues每个标量值的无符号字符值组成。

COLOR_SCALARS dataName nValues
c00 c01 ... c0(nValues-1)
c10 c11 ... c1(nValues-1)
...
c(n-1)0 c(n-1)1 ... c(n-1)(nValues-1)

  • 查找表

tableName字段是一个字符串(没有嵌入空格),用于标识查找表。VTK读取器使用此标签来提取特定的表。

查找表中的每个条目都是一个rgba[4]数组(alpha=0时为透明)。如果文件格式为ASCII,则查找表值必须是介于(0,1)之间的浮点值。如果文件格式为二进制,则数据流必须是每个表项的四个无符号字符值。

LOOKUP_TABLE tableName size
r0 g0 b0 a0
r1 g1 b1 a1
...
rsize-1 gsize-1 bsize-1 asize-1

  • 矢量
VECTORS dataName dataType
v0x v0y v0z
v1x v1y v1z
...
v(n-1)x v(n-1)y v(n-1)z

  • 法线

法线假定为标准化| n |=1。

NORMALS dataName dataType
n0x n0y n0z
n1x n1y n1z
...
n(n-1)x n(n-1)y n(n-1)z

  • 纹理坐标

支持123维的纹理坐标。

TEXTURE_COORDINATES dataName dim dataType
t00 t01 ... t0(dim-1)
t10 t11 ... t1(dim-1)
...
t(n-1)0 t(n-1)1 ... t(n-1)(dim-1)

  • 张量

目前只支持实值对称张量。

TENSORS dataName dataType
t0 00 t0 01 t0 02
t0 10 t0 11 t0 12
t0 20 t0 21 t0 22
t1 00 t1 01 t1 02
t1 10 t1 11 t1 12
t1 20 t1 21 t1 22
...
t n-1 00 t n-1 01 t n-1 02
t n-1 10 t n-1 11 t n-1 12
t n-1 20 t n-1 21 t n-1 22

  • 字段数据

字段数据本质上是一组数据数组。定义字段数据意味着给字段命名并指定它包含的数组数。对于每个数组,都定义了如下的量:数组的名称arrayName(i)、数组的维数numComponents、数组中元组的数量numTuples、数据类型dataType

FIELD dataName numArrays
arrayName0 numComponents numTuples dataType
f00 f01 ... f0(numComponents-1)
f10 f11 ... f1(numComponents-1)
...
f(numTuples-1)0 f(numTuples-1)1 ... f(numTuples-1)(numComponents-1)
arrayName1 numComponents numTuples dataType
f00 f01 ... f0(numComponents-1)
f10 f11 ... f1(numComponents-1)
...
f(numTuples-1)0 f(numTuples-1)1 ... f(numTuples-1)(numComponents-1)
...
arrayName(numArrays-1) numComponents numTuples dataType
f00 f01 ... f0(numComponents-1)
f10 f11 ... f1(numComponents-1)
...
f(numTuples-1)0 f(numTuples-1)1 ... f(numTuples-1)(numComponents-1)

例子

第一个例子是由六个多边形面表示的立方体。我们在六个面上定义了一个单分量标量、法线和场数据。有与八个顶点相关联的标量数据。还定义了与点标量相关联的八种颜色的查找表。

# vtk DataFile Version 2.0
Cube example
ASCII
DATASET POLYDATA
POINTS 8 float
0.0 0.0 0.0
1.0 0.0 0.0
1.0 1.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0
1.0 0.0 1.0
1.0 1.0 1.0
0.0 1.0 1.0
POLYGONS 6 30
4 0 1 2 3
4 4 5 6 7
4 0 1 5 4
4 2 3 7 6
4 0 4 7 3
4 1 2 6 5
CELL_DATA 6
SCALARS cell_scalars int 1
LOOKUP_TABLE default
0
1
2
3
4
5
NORMALS cell_normals float
0 0 -1
0 0 1
0 -1 0
0 1 0
-1 0 0
1 0 0
FIELD FieldData 2
cellIds 1 6 int
0 1 2 3 4 5
faceAttributes 2 6 float
0.0 1.0 1.0 2.0 2.0 3.0 3.0 4.0 4.0 5.0 5.0 6.0
POINT_DATA 8
SCALARS sample_scalars float 1
LOOKUP_TABLE my_table
0.0
1.0
2.0
3.0
4.0
5.0
6.0
7.0
LOOKUP_TABLE my_table 8
0.0 0.0 0.0 1.0
1.0 0.0 0.0 1.0
0.0 1.0 0.0 1.0
1.0 1.0 0.0 1.0
0.0 0.0 1.0 1.0
1.0 0.0 1.0 1.0
0.0 1.0 1.0 1.0
1.0 1.0 1.0 1.0

下一个例子是3×4×5维的结构化点数据集。由于没有定义查找表,因此用户必须在VTK中创建一个查找表,否则将使用默认的查找表。

# vtk DataFile Version 2.0
Volume example
ASCII
DATASET STRUCTURED_POINTS
DIMENSIONS 3 4 6
ASPECT_RATIO 1 1 1
ORIGIN 0 0 0
POINT_DATA 72
SCALARS volume_scalars char 1
LOOKUP_TABLE default
0 0 0 0 0 0 0 0 0 0 0 0
0 5 10 15 20 25 25 20 15 10 5 0
0 10 20 30 40 50 50 40 30 20 10 0
0 10 20 30 40 50 50 40 30 20 10 0
0 5 10 15 20 25 25 20 15 10 5 0
0 0 0 0 0 0 0 0 0 0 0 0

第三个例子是一个非结构化网格,包含19种VTK单元类型中的12种(参见图2和图3)。该文件包含标量和矢量数据。

# vtk DataFile Version 2.0
Unstructured Grid Example
ASCII
DATASET UNSTRUCTURED_GRID
POINTS 27 float
0 0 0  1 0 0  2 0 0  0 1 0  1 1 0  2 1 0
0 0 1  1 0 1  2 0 1  0 1 1  1 1 1  2 1 1
0 1 2  1 1 2  2 1 2  0 1 3 1 1 3  2 1 3
0 1 4  1 1 4  2 1 4  0 1 5  1 1 5  2 1 5
0 1 6  1 1 6  2 1 6
CELLS 11 60
8 0 1 4 3 6 7 10 9
8 1 2 5 4 7 8 11 10
4 6 10 9 12
4 5 11 10 14
6 15 16 17 14 13 12
6 18 15 19 16 20 17
4 22 23 20 19
3 21 22 18
3 22 19 18
2 26 25
1 24
CELL_TYPES 11
12
12
10
10
7
6
9
5
5
3
1
POINT_DATA 27
SCALARS scalars float 1
LOOKUP_TABLE default
0.0 1.0 2.0 3.0 4.0 5.0
6.0 7.0 8.0 9.0 10.0 11.0
12.0 13.0 14.0 15.0 16.0 17.0
18.0 19.0 20.0 21.0 22.0 23.0
24.0 25.0 26.0
VECTORS vectors float
1 0 0 1 1 0 0 2 0 1 0 0 1 1 0 0 2 0
1 0 0 1 1 0 0 2 0 1 0 0 1 1 0 0 2 0
0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1
0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1
0 0 1 0 0 1 0 0 1

图2 VTK中的线性单元类型。使用include文件CellType.h操作单元格类型
图3 VTK中的非线性单元类型

第四个也是最后一个示例是用字段表示的数据。您可能还希望在第158页看到“使用字段数据”来了解如何操作这些数据。

(下面显示的数据文件可以在$VTK_data_ROOT/data/financial.vtk.中找到)

# vtk DataFile Version 2.0
Financial data in vtk field format
ASCII
FIELD financialData 6
TIME_LATE 1 3188 float
29.14 0.00 0.00 11.71 0.00 0.00 0.00 0.00
...(more stuff — 3188 total values)...
MONTHLY_PAYMENT 1 3188 float
7.26 5.27 8.01 16.84 8.21 15.75 10.62 15.47
...(more stuff)...
UNPAID_PRINCIPLE 1 3188 float
430.70 380.88 516.22 1351.23 629.66 1181.97 888.91 1437.83
...(more stuff)...
LOAN_AMOUNT 1 3188 float
441.50 391.00 530.00 1400.00 650.00 1224.00 920.00 1496.00
...(more stuff)...
INTEREST_RATE 1 3188 float
13.875 13.875 13.750 11.250 11.875 12.875 10.625 10.500
...(more stuff)...
MONTHLY_INCOME 1 3188 unsigned_short
39 51 51 38 35 49 45 56
...(more stuff)...

在本例中,一个字段用六个数组表示。每个数组都有一个组件和3188个元组。六个数组中有五个是float类型,而最后一个数组的类型是unsigned_short。数据目录中提供了其他示例。

XML文件格式

VTK使用XML语法提供了另一组数据格式。而这些格式比传统VTK格式,它们支持更多的功能。其开发的主要动机是促进数据流和并行I/O,包括对压缩、可移植二进制编码、随机存取、大端和小端字节顺序、工件数据的多文件表示以及不同VTK数据集类型的新文件扩展名的支持。XML还提供了许多特性,尤其是使用特定于应用程序的标记扩展文件格式的能力。

vtkxml数据文件有两种类型:并行和串行,如下所述......

【完】

就翻译到这里。最后,放个此文档在线编辑地址,欢迎补充。

金山文档 | VTK-file-format​kdocs.cn

★★★★★★ 相关推荐 ★★★★★★

文件标识符必须为双精度类型的整数值标量_【翻译】VTK官方文档 - vtk文件格式相关推荐

  1. 文件标识符必须为双精度类型的整数值标量_数据类型

    标识符 在Java中,标识符多用于类名.方法.字段.变量和包名等,他的命名方式需遵循以下规则: 1.标识符可以由字母.数字.__.$组成,但不能包含!.#.%.空格等其他特殊字符. 2.标识符的命名最 ...

  2. Mybatis官方文档中的(XML映射文件)模块(半途凉了)

    Mybatis官方文档中的(XML映射文件)模块(半途凉了) 一.XML映射器属性的介绍 Mybatis的真正强大之处在于它的语句映射.他即可以自动的映射数据库中的字段和对象的属性. SQL映射文件有 ...

  3. mysql 标识符规则_MySQL 标识符到底区分大小写么——官方文档告诉你

    最近在阿里云服务器上部署一个自己写的小 demo 时遇到一点问题,查看 Tomcat 日志后定位到问题出现在与数据库服务器交互的地方,执行 SQL 语句时会返回 指定列.指定名 不存在的错误.多方查证 ...

  4. 阿里云OSS | 对象存储服务快速入门 | 参考官方文档实现使用JavaSDK上传文件 | 本地上传与web上传案例

    参考文档 : 点击查看 文章目录 运行环境 一.OSS相关概念 1.1 Storage Class 存储类型 1.2 Bucket 存储空间 1.3 Object 对象 1.4 Region 地域 1 ...

  5. Java中Integer类型的整数值的大小比较

    1.如果Integer类型的两个数相等,如果范围在-128~127(默认),那么用"=="返回true,其余的范会false. 2.两个基本类型int进行相等比较,直接用==即可. ...

  6. MyBatis官方文档-XML 映射文件

    最近更新: 15 七月 2019|版本: 3.5.2 文章目录 XML 映射文件 insert, update 和 delete sql 结果映射 高级结果映射 结果映射(resultMap) id ...

  7. 《Maven官方文档》POM文件(一)

    什么是POM? POM(project object model)包含了工程信息和工程的配置细节,Maven使用POM文件来构建工程.POM文件包含了工程中的大部分默认值.举个例子,target是默认 ...

  8. mybatis insert返回主键_MyBatis官方文档XML 映射文件

    XML 映射文件 MyBatis 的真正强大在于它的映射语句,这是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省 ...

  9. 微软 theme 主题文件官方文档中文翻译版

    这份文档将主要讨论Windows 7,Windows Vista和Windows XP中使用的主题文件(.theme)的语言格式.一个.theme文件实质上是一个分段记录特定桌面可视化效果设定的.in ...

最新文章

  1. 判断远程图片是否存在的JavaScript代码
  2. json工具类ObjectMapper的详细使用记录
  3. 20180316 数组所占空间
  4. hdu 1047 Integer Inquiry
  5. java使用原生语句操作mongo_Java 中 MongoDB 使用指南
  6. Vue+Element+Springboot实现图片上传
  7. ANT:fileset中使用exclude
  8. ListView列表刷新方法的区别
  9. Sharding-JDBC水平分表(环境搭建)_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记007
  10. 论文|SDNE的算法原理、代码实现和在阿里凑单场景中的应用说明(附代码)
  11. openwrt uci
  12. 2021年运维工程师主要职责和就业前景
  13. 【ZZULIOJ】1096: 水仙花数(函数专题)
  14. 【构建更好的软件—TeamDev】上海道宁为您带来强大且富有洞察力的TeamDev产品及自定义解决方案
  15. 剑指offer之数组中重复的数(Java实现)
  16. 人生法则:蝴蝶效应、青蛙现象、鳄鱼法则、鲇鱼效应、羊群效应、刺猬法则...
  17. office2016简体中文版
  18. 八分量基于区块链技术赋能我国工业互联网建设
  19. java中cache是什么_java中的cache机制
  20. 统计学习之路|(一)统计学习理论与方法概述

热门文章

  1. Linux下Boost编译安装
  2. 在VC6.0中创建工程并输入源代码
  3. c语言和画图软件,大佬们,小菜鸟想问一问用vc编译器做简易画图软件
  4. java hashcode返回1_java – 为什么hashCode()在所有连续执行中为对象返回相同的值?...
  5. python for 循环中使用 remove 删除列表中的元素
  6. flask 创建基本模板
  7. 三十三、分治算法---汉诺塔问题
  8. 十八、多生产者--多消费者问题
  9. 【JVM】Java变量的种类(提高版)
  10. 对服务器文件夹写,服务器文件夹写入权限设置