diff --git a/zh-cn/application-dev/js-reference/Readme-CN.md b/zh-cn/application-dev/js-reference/Readme-CN.md index 4a26b5c26981344e69a67728b508787fd5e5f9ee..33a5316b4272315712710fd67df268180b4679ad 100755 --- a/zh-cn/application-dev/js-reference/Readme-CN.md +++ b/zh-cn/application-dev/js-reference/Readme-CN.md @@ -105,4 +105,5 @@ - [国际化](国际化.md) - [资源管理](资源管理.md) - [升级](升级.md) - + - [文件管理](文件管理.md) + - [文件存储](文件存储.md) \ No newline at end of file diff --git "a/zh-cn/application-dev/js-reference/\346\226\207\344\273\266\345\255\230\345\202\250.md" "b/zh-cn/application-dev/js-reference/\346\226\207\344\273\266\345\255\230\345\202\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..61b7a80b1de548aa2f3d8af2ecca85436add985e --- /dev/null +++ "b/zh-cn/application-dev/js-reference/\346\226\207\344\273\266\345\255\230\345\202\250.md" @@ -0,0 +1,579 @@ +# 文件存储 + +更新时间: 2021-07-09 15:29 + +说明 + +从API Version 6开始,该接口不再维护,推荐使用[文件管理接口(@ohos.fileio)](文件管理.md)进行文件存储管理。 + +涉及到文件目录的请参考下述表格: + + + + + + + + + + + + + + + + + + + +

目录类型

+

路径前缀

+

访问可见性

+

说明

+

临时目录

+

internal://cache/

+

仅本应用可见

+

可读写,随时可能清除,不保证持久性。一般用作下载临时目录或缓存目录。

+

应用私有目录

+

internal://app/

+

仅本应用可见

+

随应用卸载删除。

+
+ +## 支持设备 + + + +| API | 手机 | 平板 | 智慧屏 | 智能穿戴 | +| --------------------- | ---- | ---- | ------ | -------- | +| file.move | 支持 | 支持 | 支持 | 支持 | +| file.copy | 支持 | 支持 | 支持 | 支持 | +| file.list | 支持 | 支持 | 支持 | 支持 | +| file.get | 支持 | 支持 | 支持 | 支持 | +| file.delete | 支持 | 支持 | 支持 | 支持 | +| file.writeText | 支持 | 支持 | 支持 | 支持 | +| file.writeArrayBuffer | 支持 | 支持 | 支持 | 支持 | +| file.readText | 支持 | 支持 | 支持 | 支持 | +| file.readArrayBuffer | 支持 | 支持 | 支持 | 支持 | +| file.access | 支持 | 支持 | 支持 | 支持 | +| file.mkdir | 支持 | 支持 | 支持 | 支持 | +| file.rmdir | 支持 | 支持 | 支持 | 支持 | + +说明 + +file.writeText、file.writeArrayBuffer、file.readText和file.readArrayBuffer仅支持文本文档读写。 + +## 导入模块 + + + +```javascript +import file from '@system.file'; +``` + +## 权限列表 + + + +无 + +## file.move(OBJECT) + + + +将指定文件移动到其他指定位置。 + +- 参数 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | ---- | ----------------------------------------------------- | + | srcUri | string | 是 | 要移动的文件的uri。 | + | dstUri | string | 是 | 文件要移动到的位置的uri。 | + | success | Function | 否 | 接口调用成功的回调函数,返回文件要移动到的位置的uri。 | + | fail | Function | 否 | 接口调用失败的回调函数。 | + | complete | Function | 否 | 接口调用结束的回调函数。 | + + fail返回错误代码: + + | 错误码 | 说明 | + | ------ | ------------------ | + | 202 | 出现参数错误。 | + | 300 | 出现I/O错误。 | + | 301 | 文件或目录不存在。 | + +- 示例 + + ```javascript + file.move({ + srcUri: 'internal://app/myfiles1', + dstUri: 'internal://app/myfiles2', + success: function(uri) { + console.log('call success callback success'); + }, + fail: function(data, code) { + console.error('call fail callback fail, code: ' + code + ', data: ' + data); + }, + }); + ``` + +## file.copy(OBJECT) + + + +将指定文件拷贝并存储到指定位置,接口所使用的URI描述详见[文件组织](https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-framework-file-0000000000611396)。 + +- 参数 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | ---- | ------------------------------------------------------------ | + | srcUri | string | 是 | 要拷贝的文件的uri。 | + | dstUri | string | 是 | 文件要拷贝到的位置的uri。 不支持用应用资源路径或tmp类型的uri。 | + | success | Function | 否 | 接口调用成功的回调函数,返回文件要拷贝到的位置的uri。 | + | fail | Function | 否 | 接口调用失败的回调函数。 | + | complete | Function | 否 | 接口调用结束的回调函数。 | + + fail返回错误代码: + + | 错误码 | 说明 | + | ------ | ------------------ | + | 202 | 出现参数错误。 | + | 300 | 出现I/O错误。 | + | 301 | 文件或目录不存在。 | + +- 示例 + + ```javascript + file.copy({ + srcUri: 'internal://app/file.txt', + dstUri: 'internal://app/file_copy.txt', + success: function(uri) { + console.log('call success callback success'); + }, + fail: function(data, code) { + console.error('call fail callback fail, code: ' + code + ', data: ' + data); + }, + }); + ``` + +## file.list(OBJECT) + + + +获取指定路径下全部文件的列表,接口所使用的 URI 描述详见[文件组织](https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-framework-file-0000000000611396)。 + +- 参数 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | ---- | ------------------------ | + | uri | string | 是 | 目录uri。 | + | success | Function | 否 | 接口调用成功的回调函数。 | + | fail | Function | 否 | 接口调用失败的回调函数。 | + | complete | Function | 否 | 接口调用结束的回调函数。 | + + success返回值: + + | 参数名 | 类型 | 说明 | + | -------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | fileList | Array<[FileInfo](https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-file-storage-0000000000629445#ZH-CN_TOPIC_0000001102026082__table156231426174610)> | 获取的文件列表,其中每个文件的信息的格式为: **{** **uri:'file1',** **lastModifiedTime:1589965924479,** **length:10240,** **type: 'file'** **}** | + + + + | 参数名 | 类型 | 说明 | + | ---------------- | ------ | ------------------------------------------------------------ | + | uri | string | 文件的 uri。 | + | lastModifiedTime | number | 文件上一次保存时的时间戳,显示从1970/01/01 00:00:00 GMT到当前时间的毫秒数。 | + | length | number | 文件的大小,单位为字节。 | + | type | string | 文件的类型,可选值为: dir:目录;file:文件。 | + + fail返回错误代码: + + | 错误码 | 说明 | + | ------ | ------------------ | + | 202 | 出现参数错误。 | + | 300 | 出现I/O错误。 | + | 301 | 文件或目录不存在。 | + +- 示例 + + ```javascript + file.list({ + uri: 'internal://app/pic', + success: function(data) { + console.log(data.fileList); + }, + fail: function(data, code) { + console.error('call fail callback fail, code: ' + code + ', data: ' + data); + }, + }); + ``` + +## file.get(OBJECT) + + + +获取指定本地文件的信息,URI请参考[文件组织](https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-framework-file-0000000000611396)。 + +- 参数 + + | 参数名 | 类型 | 必填 | 说明 | + | --------- | -------- | ---- | --------------------------------------------- | + | uri | string | 是 | 文件的uri。 | + | recursive | boolean | 否 | 是否进行递归获取子目录文件列表,缺省为false。 | + | success | Function | 否 | 接口调用成功的回调函数。 | + | fail | Function | 否 | 接口调用失败的回调函数。 | + | complete | Function | 否 | 接口调用结束的回调函数。 | + + success返回值: + + | 参数名 | 类型 | 说明 | + | ---------------- | ------ | ------------------------------------------------------------ | + | uri | string | 文件的uri。 | + | length | number | 文件字节长。 | + | lastModifiedTime | number | 文件保存时的时间戳,从1970/01/01 00:00:00到当前时间的毫秒数。 | + | type | string | 文件类型,可选值为: dir:目录;file:文件。 | + | subFiles | Array | 文件列表。 | + + fail返回错误代码: + + | 错误码 | 说明 | + | ------ | ------------------ | + | 202 | 出现参数错误。 | + | 300 | 出现I/O错误。 | + | 301 | 文件或目录不存在。 | + +- 示例 + + ```javascript + file.get({ + uri: 'internal://app/file', + success: function(data) { + console.log(data.uri); + }, + fail: function(data, code) { + console.error('call fail callback fail, code: ' + code + ', data: ' + data); + }, + }); + ``` + +## file.delete(OBJECT) + + + +删除本地文件,使用的URI参考[文件组织](https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-framework-file-0000000000611396)。 + +- 参数 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | ---- | ----------------------------------- | + | uri | string | 是 | 删除文件的uri,不能是应用资源路径。 | + | success | Function | 否 | 接口调用成功的回调函数。 | + | fail | Function | 否 | 接口调用失败的回调函数。 | + | complete | Function | 否 | 接口调用结束的回调函数。 | + + fail返回错误代码: + + | 错误码 | 说明 | + | ------ | ------------------ | + | 202 | 参数错误。 | + | 300 | I/O错误。 | + | 301 | 文件或目录不存在。 | + +- 示例 + + ```javascript + file.delete({ + uri: 'internal://app/my_file', + success: function() { + console.log('call delete success.'); + }, + fail: function(data, code) { + console.error('call fail callback fail, code: ' + code + ', data: ' + data); + }, + }); + ``` + +## file.writeText(OBJECT) + + + +写文本内容到指定文件。 + +- 参数 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | ---- | --------------------------------------- | + | uri | string | 是 | 本地文件uri,如果文件不存在会创建文件。 | + | text | string | 是 | 写入的字符串。 | + | encoding | string | 否 | 编码格式,默认为UTF-8。 | + | append | boolean | 否 | 是否追加模式,默认为false。 | + | success | Function | 否 | 接口调用成功的回调函数。 | + | fail | Function | 否 | 接口调用失败的回调函数。 | + | complete | Function | 否 | 接口调用结束的回调函数。 | + + fail返回错误代码: + + | 错误码 | 说明 | + | ------ | ------------------ | + | 202 | 参数错误。 | + | 300 | I/O错误。 | + | 301 | 文件或目录不存在。 | + +- 示例 + + ```javascript + file.writeText({ + uri: 'internal://app/workspace/test.txt', + text: 'Text that just for test.', + success: function() { + console.log('call writeText success.'); + }, + fail: function(data, code) { + console.error('call fail callback fail, code: ' + code + ', data: ' + data); + }, + }); + ``` + +## file.writeArrayBuffer(OBJECT) + + + +写Buffer内容到指定文件。 + +- 参数 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | ---------- | ---- | ------------------------------------------------------------ | + | uri | string | 是 | 本地文件uri,如果文件不存在会创建文件。 | + | buffer | Uint8Array | 是 | 写入的Buffer。 | + | position | number | 否 | 文件开始写入数据的位置的偏移量,默认为0。 | + | append | boolean | 否 | 是否追加模式,默认为false。当设置为true时,position参数无效。 | + | success | Function | 否 | 接口调用成功的回调函数。 | + | fail | Function | 否 | 接口调用失败的回调函数。 | + | complete | Function | 否 | 接口调用结束的回调函数。 | + + fail返回错误代码: + + | 错误码 | 说明 | + | ------ | ------------------ | + | 202 | 出现参数错误。 | + | 300 | 出现I/O错误。 | + | 301 | 文件或目录不存在。 | + +- 示例 + + ```javascript + file.writeArrayBuffer({ + uri: 'internal://app/workspace/test', + buffer: buffer, //buffer为Uint8Array类型 + success: function() { + console.log('call writeArrayBuffer success.'); + }, + fail: function(data, code) { + console.error('call fail callback fail, code: ' + code + ', data: ' + data); + }, + }); + ``` + +## file.readText(OBJECT) + + + +从指定文件中读取文本内容。 + +- 参数 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | ---- | ------------------------ | + | uri | string | 是 | 本地文件uri。 | + | encoding | string | 否 | 编码格式,缺省为UTF-8。 | + | success | Function | 否 | 接口调用成功的回调函数。 | + | fail | Function | 否 | 接口调用失败的回调函数。 | + | complete | Function | 否 | 接口调用结束的回调函数。 | + + success返回值: + + | 参数名 | 类型 | 说明 | + | ------ | ------ | ------------------ | + | text | string | 读取到的文本内容。 | + + fail返回错误代码: + + | 错误码 | 说明 | + | ------ | ------------------ | + | 202 | 出现参数错误。 | + | 300 | 出现I/O错误。 | + | 301 | 文件或目录不存在。 | + +- 示例 + + ```javascript + file.readText({ + uri: 'internal://app/workspace/text.txt', + success: function(data) { + console.log('call readText success: ' + data.text); + }, + fail: function(data, code) { + console.error('call fail callback fail, code: ' + code + ', data: ' + data); + }, + }); + ``` + +## file.readArrayBuffer(OBJECT) + + + +从指定文件中读取Buffer内容。 + +- 参数 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | ---- | -------------------------------------- | + | uri | string | 是 | 本地文件uri。 | + | position | number | 否 | 读取的起始位置,缺省为文件的起始位置。 | + | length | number | 否 | 需要读取的长度,缺省则读取到文件结尾。 | + | success | Function | 否 | 接口调用成功的回调函数。 | + | fail | Function | 否 | 接口调用失败的回调函数。 | + | complete | Function | 否 | 接口调用结束的回调函数。 | + + success返回值: + + | 参数名 | 类型 | 说明 | + | ------ | ---------- | ------------------ | + | buffer | Uint8Array | 读取到的文件内容。 | + + fail返回错误代码: + + | 错误码 | 说明 | + | ------ | ------------------ | + | 202 | 出现参数错误。 | + | 300 | 出现I/O错误。 | + | 301 | 文件或目录不存在。 | + +- 示例 + + ```javascript + file.readArrayBuffer({ + uri: 'internal://app/workspace/test', + position: 10, + length: 200, + success: function(data) { + console.log('call readArrayBuffer success: ' + data.buffer); + }, + fail: function(data, code) { + console.error('call fail callback fail, code: ' + code + ', data: ' + data); + }, + }); + ``` + +## file.access(OBJECT) + + + +判断指定文件或目录是否存在。 + +- 参数 + + | 参数名 | 类型 | 必填 | 说明 | + | -------- | -------- | ---- | ------------------------ | + | uri | string | 是 | 目录或文件uri。 | + | success | Function | 否 | 接口调用成功的回调函数。 | + | fail | Function | 否 | 接口调用失败的回调函数。 | + | complete | Function | 否 | 接口调用结束的回调函数。 | + + fail返回错误代码: + + | 错误码 | 说明 | + | ------ | ------------------ | + | 202 | 出现参数错误。 | + | 300 | 出现I/O 错误。 | + | 301 | 文件或目录不存在。 | + +- 示例 + + ```javascript + file.access({ + uri: 'internal://app/test', + success: function() { + console.log('call access success.'); + }, + fail: function(data, code) { + console.error('call fail callback fail, code: ' + code + ', data: ' + data); + }, + }); + ``` + +## file.mkdir(OBJECT) + + + +创建指定目录。 + +- 参数 + + | 参数名 | 类型 | 必填 | 说明 | + | --------- | -------- | ---- | ------------------------------------------- | + | uri | string | 是 | 目录的uri路径。 | + | recursive | boolean | 否 | 是否递归创建该目录的上级目录,缺省为false。 | + | success | Function | 否 | 接口调用成功的回调函数。 | + | fail | Function | 否 | 接口调用失败的回调函数。 | + | complete | Function | 否 | 接口调用结束的回调函数。 | + + fail返回错误代码: + + | 错误码 | 说明 | + | ------ | -------------- | + | 202 | 出现参数错误。 | + | 300 | 出现I/O 错误。 | + +- 示例 + + ```javascript + file.mkdir({ + uri: 'internal://app/test_directory', + success: function() { + console.log('call mkdir success.'); + }, + fail: function(data, code) { + console.error('call fail callback fail, code: ' + code + ', data: ' + data); + }, + }); + ``` + +## file.rmdir(OBJECT) + + + +删除指定目录。 + +- 参数 + + | 参数名 | 类型 | 必填 | 说明 | + | --------- | -------- | ---- | ----------------------------------------- | + | uri | string | 是 | 目录的uri路径。 | + | recursive | boolean | 否 | 是否递归删除子文件和子目录,缺省为false。 | + | success | Function | 否 | 接口调用成功的回调函数。 | + | fail | Function | 否 | 接口调用失败的回调函数。 | + | complete | Function | 否 | 接口调用结束的回调函数。 | + + fail返回错误代码: + + | 错误码 | 说明 | + | ------ | ------------------ | + | 202 | 出现参数错误。 | + | 300 | 出现I/O 错误。 | + | 301 | 文件或目录不存在。 | + +- 示例 + + ```javascript + file.rmdir({ + uri: 'internal://app/test_directory', + success: function() { + console.log('call rmdir success.'); + }, + fail: function(data, code) { + console.error('call fail callback fail, code: ' + code + ', data: ' + data); + }, + }); + ``` + diff --git "a/zh-cn/application-dev/js-reference/\346\226\207\344\273\266\347\256\241\347\220\206.md" "b/zh-cn/application-dev/js-reference/\346\226\207\344\273\266\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..52a38c973cc66006b36a41a5fe4f95b1f73ea541 --- /dev/null +++ "b/zh-cn/application-dev/js-reference/\346\226\207\344\273\266\347\256\241\347\220\206.md" @@ -0,0 +1,1056 @@ +# 文件管理 + + + +## 支持设备 + +| 手机 | 平板 | 智慧屏 | 智能穿戴 | +| ---- | ------ | ------ | -------- | +| 支持 | 不支持 | 不支持 | 支持 | + + + +## 导入模块 + +```js +import fileio from '@ohos.fileio' +``` + + + +## 权限列表 + +无 + + + +## openSync(path:string, flags?:number, mode?:number): number + +同步地打开文件。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ------------------------------------------------------------ | + | path | string | 是 | 待打开文件的绝对路径。 | + | flags | number | 否 | 打开文件的选项,必须指定如下选项中的一个,默认以只读方式打开:
0o0:只读打开。
0o1:只写打开。
0o2:读写打开。
同时,也可给定如下选项,以按位或的方式追加,默认不给定任何额外选项:
0o100:若文件不存在,则创建文件。使用该选项时必须指定第三个参数mode。
0o200:如果追加了0o100 选项,且文件已经存在,则报错。
0o1000:如果文件存在且以只写或读写的方式打开文件,则将其长度裁剪为零。
0o2000:以追加方式打开,后续写将追加到文件末尾。
0o4000:如果path指向FIFO、块特殊文件或字符特殊文件,则本次打开及后续IO进行非阻塞操作。
0o200000:如果path指向目录,则报错。
0o400000:如果path指向符号链接,则报错。
0o4010000:以同步IO的方式打开文件。 | + | mode | number | 否 | 若创建文件,则指定文件的权限,可给定如下权限,以按位或的方式追加权限,默认给定0o666。
0o666:所有者具有读、写及可执行权限,其余用户具有读、写及可执行权限。
0o0700:所有者具有读、写及可执行权限。
0o0400:所有者具有读权限。
0o0200:所有者具有写权限。
0o0100:所有者具有可执行权限。
0o0070:所有用户组具有读、写及可执行权限。
0o0040:所有用户组具有读权限。
0o0020:所有用户组具有写权限。
0o0010:所有用户组具有可执行权限。
0o0007:其余用户具有读、写及可执行权限。
0o0004:其余用户具有读权限。
0o0002:其余用户具有写权限。
0o0001 :其余用户具有可执行权限。 | + +- 返回值: + + | 类型 | 说明 | + | :----- | :--------------------- | + | number | 打开文件的文件描述符。 | + +- 示例: + + ```js + let fd = fileio.openSync(path); + ``` + + + +## accessSync(path: string, mode?: number): void + +同步地检查当前进程是否可访问某文件。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ------------------------------------------------------------ | + | path | string | 是 | 文件路径。 | + | mode | number | 否 | 查询文件时的选项,可给定如下选项,以按位或的方式使用多个选项,默认给定0。
确认当前进程是否具有对应权限:
0:确认文件是否存在。
1:确认当前进程是否具有可执行权限。
2:确认当前进程是否具有写权限。
4:确认当前进程是否具有读权限。 | + +- 返回值: + + 无 + +- 示例: + + ```js + fileio.accessSync(path); + ``` + + + +## chmodSync(path:string, mode:number):void + +同步地修改文件权限。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ------------------------------------------------------------ | + | path | string | 是 | 文件路径。 | + | mode | number | 是 | 文件的访问权限,可给定如下权限,以按位或的方式追加权限。只有该文件的所有者或有效用户识别码为0,才可以修改该文件的权限。
0o4000:文件的 (set user-id on execution)位
0o2000:文件的 (set group-id on execution)位
0o1000:文件的sticky 位
0o0700:所有者具有读、写及可执行权限。
0o0400:所有者具有读权限。
0o0200:所有者具有写权限。
0o0100:所有者具有可执行权限。
0o0070:所有用户组具有读、写及可执行权限。
0o0040:所有用户组具有读权限。
0o0020:所有用户组具有写权限。
0o0010:所有用户组具有可执行权限。
0o0007:其余用户具有读、写及可执行权限。
0o0004:其余用户具有读权限。
0o0002:其余用户具有写权限。
0o0001 :其余用户具有可执行权限。 | + +- 返回值: + + 无 + +- 示例: + + ```js + fileio.chmodSync(path, 0o660); + ``` + + + +## chownSync(path:string, owner:number, group:number):void + +同步地修改文件的所有者和组。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | -------------------- | + | path | string | 是 | 待修改的文件路径。 | + | owner | number | 是 | 文件所有者的用户ID。 | + | group | number | 是 | 组ID。 | + +- 返回值: + + 无 + +- 示例: + + ```js + fileio.chownSync(path, UID, UID); + ``` + + + +## closeSync(fd: number): void + +关闭文件描述符。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ------------ | + | fd | number | 是 | 文件描述符。 | + +- 返回值: + + 无 + +- 示例: + + ```js + fileio.closeSync(fd); + ``` + + + +## copyFileSync(src:string, dest:string, mode?:number): void + +同步地复制文件。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ------------------------------------------------------------ | + | src | string | 是 | 待复制文件的路径。 | + | dest | string | 是 | 目标文件路径。 | + | mode | number | 否 | mode提供覆盖文件的选项,当前仅支持0,且默认为0。0:完全覆盖目标文件,未覆盖部分将被裁切掉。 | + +- 返回值: + + 无 + +- 示例: + + ```js + fileio.copyFileSync(src, dest); + ``` + + + +## fchmodSync(fd:number, mode:number):void + +同步地更改文件描述符所指文件的权限。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ------------------------------------------------------------ | + | fd | number | 是 | 待修改权限的文件描述符 | + | mode | number | 是 | 文件的访问权限,可给定如下权限,以按位或的方式追加权限。只有该文件的所有者或有效用户识别码为0,才可以修改该文件的权限。
0o4000:文件的 (set user-id on execution)位
0o2000:文件的 (set group-id on execution)位
0o1000:文件的sticky 位
0o0700:所有者具有读、写及可执行权限。
0o0400:所有者具有读权限。
0o0200:所有者具有写权限。
0o0100:所有者具有可执行权限。
0o0070:所有用户组具有读、写及可执行权限。
0o0040:所有用户组具有读权限。
0o0020:所有用户组具有写权限。
0o0010:所有用户组具有可执行权限。
0o0007:其余用户具有读、写及可执行权限。
0o0004:其余用户具有读权限。
0o0002:其余用户具有写权限。
0o0001 :其余用户具有可执行权限。 | + +- 返回值: + + 无 + +- 示例: + + ```js + let fd = fileio.openSync(path, 0o2); + fileio.fchmodSync(fd, 0o660); + ``` + + + +## fchownSync(fd:number, owner:number, group:number):void + +同步地更改已打开文件的所有者和组。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ------------------ | + | fd | number | 是 | 要修改的文件描述符 | + | owner | number | 是 | 文件所有者的用户ID | + | group | number | 是 | 组ID | + +- 返回值: + + 无 + +- 示例: + + ```js + let fd = fileio.openSync(path, 0o2); + fileio.fchownSync(fd, UID, UID); + ``` + + + +## fstatSync(fd:number):Stat + +同步地获取已打开文件的信息。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ---------------------- | + | fd | number | 是 | 已打开文件的文件描述符 | + +- 返回值: + + | 类型 | 说明 | + | :--- | :------------------- | + | Stat | 表示文件的具体信息。 | + +- 示例: + + ```js + let fd = fileio.openSync(path, 0o2); + let stat = fileio.fstatSync(fd); + ``` + + + +## ftruncateSync(fd:number, len?:number):void + +同步地修改已打开文件的大小。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ---------------------------------------------------- | + | fd | number | 是 | 待修改的文件描述符 | + | len | number | 否 | 指定文件大小,缺省值0,原文件大小超过len部分会被删除 | + +- 返回值: + + 无 + +- 示例: + + ```js + let fd = fileio.openSync(path, 0o2); + fileio.ftruncateSync(fd); + ``` + + + +## mkdirSync(path: string, mode?: number): void + +同步地创建目录。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ------------------------------------------------------------ | + | path | string | 是 | 待创建目录的绝对路径。 | + | mode | number | 否 | 待创建目录的权限,可给定如下权限,以按位或的方式追加权限,默认给定0o775。
0o775:所有者具有读、写及可执行权限,其余用户具有读、写及可执行权限。
0o700:所有者具有读、写及可执行权限。
0o400:所有者具有读权限。
0o200:所有者具有写权限。
0o100:所有者具有可执行权限。
0o070:所有用户组具有读、写及可执行权限。
0o040:所有用户组具有读权限。
0o020:所有用户组具有写权限。
0o010:所有用户组具有可执行权限。
0o007:其余用户具有读、写及可执行权限。
0o004:其余用户具有读权限。
0o002:其余用户具有写权限。
0o001:其余用户具有可执行权限。 | + +- 返回值: + + 无 + +- 示例: + + ``` + fileio.mkdirSync(path); + ``` + + + +## readSync(fd: number, buffer: ArrayBuffer, options?: Object): number + +同步地从文件读取数据。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------- | ----------- | ---- | ------------------------------------------------------------ | + | fd | number | 是 | 待读取文件的文件描述符。 | + | buffer | ArrayBuffer | 是 | 用于读取文件的缓冲区。 | + | options | Object | 否 | 支持如下选项:
offset,number 类型,表示将数据读取到缓冲区的位置,即相对于缓冲区首地址的偏移。可选,默认为0。
length,number 类型,表示期望读取数据的长度。可选,默认缓冲区长度减去偏移长度。
position,number 类型,表示期望读取文件的位置。可选,默认从当前位置开始读。 | + +- 返回值: + + | 类型 | 说明 | + | :----- | :--------------- | + | number | 实际读取的长度。 | + +- 示例: + + ```js + let fd = fileio.openSync(path, 0o2); + let buf = new ArrayBuffer(4096); + fileio.readSync(fd, buf); + console.log(String.fromCharCode.apply(null, new Uint8Array(buf))); + ``` + + + +## renameSync(path:string, pathTarget:string):void + +同步地重命名文件。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ---------- | ------ | ---- | -------------------- | + | path | string | 是 | 待重命名的文件原路径 | + | pathTarget | string | 是 | 要重命名的文件路径 | + +- 返回值: + + 无 + +- 示例: + + ```js + fileio.renameSync(path, pathTarget); + ``` + + + +## rmdirSync(path:string):void + +同步地删除目录。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ---------------------- | + | path | string | 是 | 待删除目录的绝对路径。 | + +- 返回值: + + 无 + +- 示例: + + ```js + fileio.rmdirSync(path); + ``` + + + +## unlinkSync(path: string): void + +同步地删除文件。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ---------------------- | + | path | string | 是 | 待删除文件的绝对路径。 | + +- 返回值: + + 无 + +- 示例: + + ``` + fileio.unlinkSync(path); + ``` + + + +## fsyncSync(fd:number):void + +同步地将缓冲区数据写回磁盘进行数据同步。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ---------------------- | + | fd | number | 是 | 待同步数据的文件描述符 | + +- 返回值: + + 无 + +- 示例: + + ```js + let fd = fileio.openSync(path, 0o2); + fileio.fsyncSync(fd); + ``` + + + +## truncateSync(path:string, len?:number):void + +同步地修改文件大小。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ---------------------------------------------------- | + | path | string | 是 | 待修改的文件路径 | + | len | number | 否 | 指定文件大小,缺省值0,原文件大小超过len部分会被删除 | + +- 返回值: + + 无 + +- 示例: + + ```js + fileio.truncateSync(path); + ``` + + + +## writeSync(fd: number, buffer: ArrayBuffer | string, options?:Object): number + +同步地将数据写入文件。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------- | --------------------- | ---- | ------------------------------------------------------------ | + | fd | number | 是 | 待写入文件的文件描述符。 | + | buffer | ArrayBuffer \| string | 是 | 待写入文件的数据,可来自缓冲区或字符串。 | + | options | Object | 否 | 支持如下选项:
offset,number类型,表示期望写入数据的位置相对于数据首地址的偏移。可选,默认为0。
length,number类型,表示期望写入数据的长度。可选,默认缓冲区长度减去偏移长度。
position,number类型,表示期望写入文件的位置。可选,默认从当前位置开始写。
encoding,string类型,当数据是 string 类型时有效,表示数据的编码方式,默认 'utf-8',仅支持 'utf-8'。 | + +- 返回值: + + | 类型 | 说明 | + | :----- | :--------------- | + | number | 实际写入的长度。 | + +- 示例: + + ```js + let fd = fileio.openSync(path, 0o102, 0o666); + let writeLen = fileio.writeSync(fd, 'hello, world'); + ``` + + + +## Stat + +文件具体信息,在调用Stat的方法前,需要先通过statSync(path:string)方法来构建一个Stat实例。 + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| ------- | -------- | ---- | ---- | ------------------------------------------------------------ | +| dev | number | 是 | 否 | 标识包含该文件的主设备号。 | +| ino | number | 是 | 否 | 标识该文件。通常同设备上的不同文件的INO不同。 | +| mode | number | 是 | 否 | 表示文件类型及权限,其首 4 位表示文件类型,后 12 位表示权限。各特征位的含义如下:
0o170000:可用于获取文件类型的掩码
0o140000:文件是套接字
0o120000:文件是符号链接
0o100000:文件是一般文件
0o060000:文件属于块设备
0o040000:文件是目录
0o020000:文件是字符设备
0o010000:文件是具名管道,即FIFO
0o0700:可用于获取用户权限的掩码
0o0400:用户读,对于普通文件,文件所有者可读取文件;对于目录,文件所有者可读取目录项
0o0200:用户写,对于普通文件,文件所有者可写入文件;对于目录,文件所有者可创建/删除目录项
0o0100:用户执行,对于普通文件,文件所有者可执行文件;对于目录,文件所有者可在目录中搜索给定路径名0o0070:可用于获取用户组权限的掩码
0o0040:用户组读,对于普通文件,文件所有用户组可读取文件;对于目录,文件所有用户组可读取目录项
0o0020:用户组写,对于普通文件,文件所有用户组可写入文件;对于目录,文件所有用户组可创建/删除目录项0o0010:用户组执行,对于普通文件,文件所有用户组可执行文件;对于目录,文件所有用户组是否可在目录中搜索给定路径名
0o0007:可用于获取其他用户权限的掩码
0o0004:其他读,对于普通文件,其他用户组可读取文件;对于目录,其他用户组可读取目录项
0o0002:其他写,对于普通文件,其他用户组可写入文件;对于目录,其他用户组可创建/删除目录项
0o0001:其他执行,对于普通文件,其他用户组可执行文件;对于目录,其他用户组可在目录中搜索给定路径名 | +| nlink | number | 是 | 否 | 文件的硬链接数。 | +| uid | number | 是 | 否 | 文件所有者的ID。 | +| gid | number | 是 | 否 | 文件所有组的ID。 | +| rdev | number | 是 | 否 | 标识包含该文件的从设备号。 | +| size | number | 是 | 否 | 文件的大小,以字节为单位。仅对普通文件有效。 | +| blksize | number | 是 | 否 | 包含该文件的磁盘块的大小 | +| blocks | number | 是 | 否 | 文件占用的块数,计算时块大小按512B计算。 | +| atime | number | 是 | 否 | 上次访问该文件的时间,表示距1970年1月1日0时0分0秒的秒数。 | +| mtime | number | 是 | 否 | 上次修改该文件的时间,表示距1970年1月1日0时0分0秒的秒数。 | +| ctime | number | 是 | 否 | 最近改变文件状态的时间,表示距1970年1月1日0时0分0秒的秒数。 | + + + +### statSync(path:string): Stat + +同步地获取文件的信息。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ---------- | + | path | string | 是 | 文件路径。 | + +- 返回值: + + | 类型 | 说明 | + | :--- | :------------------- | + | Stat | 表示文件的具体信息。 | + +- 示例: + + ```js + let stat = fileio.statSync(path); + ``` + + + +### isBlockDevice(): boolean + +用于判断当前目录项是否是块特殊文件。一个块特殊文件只能以块为粒度进行访问,且访问的时候带缓存。 + +- 参数: + + 无 + +- 返回值: + + | 类型 | 说明 | + | :------ | :------------------------------- | + | boolean | 表示当前目录项是否是块特殊设备。 | + +- 示例: + + ```js + let isBLockDevice = fileio.statSync(fpath).isBlockDevice(); + ``` + + + +### isCharacterDevice(): boolean + +用于判断当前目录项是否是字符特殊文件。一个字符特殊设备可进行随机访问,且访问的时候不带缓存。 + +- 参数: + + 无 + +- 返回值: + + | 类型 | 说明 | + | :------ | :--------------------------------- | + | boolean | 表示当前目录项是否是字符特殊设备。 | + +- 示例: + + ```js + let isCharacterDevice = fileio.statSync(fpath).isCharacterDevice(); + ``` + + + +### isDirectory(): boolean + +用于判断当前目录项是否是目录。 + +- 参数: + + 无 + +- 返回值: + + | 类型 | 说明 | + | :------ | :------------------------- | + | boolean | 表示当前目录项是否是目录。 | + +- 示例: + + ```js + let isDirectory = fileio.statSync(fpath).isDirectory(); + ``` + + + +### isFIFO(): boolean + +用于判断当前目录项是否是命名管道(有时也称为FIFO)。命名管道通常用于进程间通信。 + +- 参数: + + 无 + +- 返回值: + + | 类型 | 说明 | + | :------ | :-------------------------- | + | boolean | 表示当前目录项是否是 FIFO。 | + +- 示例: + + ```js + let isFIFO = fileio.statSync(fpath).isFIFO(); + ``` + + + +### isFile(): boolean + +用于判断当前目录项是否是普通文件。 + +- 参数: + + 无 + +- 返回值: + + | 类型 | 说明 | + | :------ | :----------------------------- | + | boolean | 表示当前目录项是否是普通文件。 | + +- 示例: + + ```js + let isFile = fileio.statSync(fpath).isFile(); + ``` + + + +### isSocket(): boolean + +用于判断当前目录项是否是套接字。 + +- 参数: + + 无 + +- 返回值: + + | 类型 | 说明 | + | :------ | :--------------------------- | + | boolean | 表示当前目录项是否是套接字。 | + +- 示例: + + ```js + let isSocket = fileio.statSync(fpath).isSocket(); + ``` + + + +### isSymbolicLink(): boolean + +用于判断当前目录项是否是符号链接。 + +- 参数: + + 无 + +- 返回值: + + | 类型 | 说明 | + | :------ | :----------------------------- | + | boolean | 表示当前目录项是否是符号链接。 | + +- 示例: + + ```js + let isSymbolicLink = fileio.statSync(fpath).isSymbolicLink(); + ``` + + + +## Dir + +管理目录,在调用Dir的方法前,需要先通过opendirSync(path: string)方法来构建一个Dir实例。 + + + +### opendirSync(path: string): Dir + +同步地打开文件目录。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ---------- | + | path | string | 是 | 目录名称。 | + +- 返回值: + + | 类型 | 说明 | + | :--- | :------------ | + | Dir | 返回Dir对象。 | + +- 示例: + + ```js + let dir = fileio.opendirSync(path); + ``` + + + +### readSync(): Dirent + +同步读取下一个目录项。 + +- 参数: + + 无 + +- 返回值: + + | 类型 | 说明 | + | :----------------------------------------------------------- | :--------------- | + | [Dirent](https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-fileio-0000001169469727#section92331215118) | 表示一个目录项。 | + +- 示例: + + ```js + let dir = fileio.opendirSync(dpath); + let dirent = dir.readSync(); + console.log(dirent.name); + ``` + + + +### closeSync(): void + +用于关闭目录。目录被关闭后,Dir中持有的文件描述将被释放,后续将无法从Dir中读取目录项。 + +- 参数: + + 无 + +- 返回值: + + 无 + +- 示例: + + ```js + let dir = fileio.opendirSync(dpath); + dir.closeSync(); + ``` + + + +## Dirent + +在调用Dirent的方法前,需要先通过dir.readSync()方法来构建一个Dirent实例。 + +### 属性 + +| 名称 | 参数类型 | 可读 | 可写 | 说明 | +| ---- | -------- | ---- | ---- | -------------- | +| name | string | 是 | 否 | 目录项的名称。 | + + + +### isBlockDevice(): boolean + +用于判断当前目录项是否是块特殊文件。一个块特殊文件只能以块为粒度进行访问,且访问的时候带缓存。 + +- 参数: + + 无 + +- 返回值: + + | 类型 | 说明 | + | :------ | :------------------------------- | + | boolean | 表示当前目录项是否是块特殊设备。 | + +- 示例: + + ```js + let dir = fileio.opendirSync(dpath); + let isBLockDevice = dir.readSync().isBlockDevice(); + ``` + + + +### isCharacterDevice(): boolean + +用于判断当前目录项是否是字符特殊设备。一个字符特殊设备可进行随机访问,且访问的时候不带缓存。 + +- 参数: + + 无 + +- 返回值: + + | 类型 | 说明 | + | :------ | :--------------------------------- | + | boolean | 表示当前目录项是否是字符特殊设备。 | + +- 示例: + + ```js + let dir = fileio.opendirSync(dpath); + let isCharacterDevice = dir.readSync().isCharacterDevice(); + ``` + + + +### isDirectory(): boolean + +用于判断当前目录项是否是目录。 + +- 参数: + + 无 + +- 返回值: + + | 类型 | 说明 | + | :------ | :------------------------- | + | boolean | 表示当前目录项是否是目录。 | + +- 示例: + + ```js + let dir = fileio.opendirSync(dpath); + let isDirectory = dir.readSync().isDirectory(); + ``` + + + +### isFIFO(): boolean + +用于判断当前目录项是否是命名管道(有时也称为FIFO)。命名管道通常用于进程间通信。 + +- 参数: + + 无 + +- 返回值: + + | 类型 | 说明 | + | :------ | :------------------------- | + | boolean | 表示当前目录项是否是FIFO。 | + +- 示例: + + ```js + let dir = fileio.opendirSync(dpath); + let isFIFO = dir.readSync().isFIFO(); + ``` + + + +### isFile(): boolean + +用于判断当前目录项是否是普通文件。 + +- 参数: + + 无 + +- 返回值: + + | 类型 | 说明 | + | :------ | :----------------------------- | + | boolean | 表示当前目录项是否是普通文件。 | + +- 示例: + + ```js + let dir = fileio.opendirSync(dpath); + let isFile = dir.readSync().isFile(); + ``` + + + +### isSocket(): boolean + +用于判断当前目录项是否是套接字。 + +- 参数: + + 无 + +- 返回值: + + | 类型 | 说明 | + | :------ | :--------------------------- | + | boolean | 表示当前目录项是否是套接字。 | + +- 示例: + + ```js + let dir = fileio.opendirSync(dpath); + let isSocket = dir.readSync().isSocket(); + ``` + + + +### isSymbolicLink(): boolean + +用于判断当前目录项是否是符号链接。 + +- 参数: + + 无 + +- 返回值: + + | 类型 | 说明 | + | :------ | :----------------------------- | + | boolean | 表示当前目录项是否是符号链接。 | + +- 示例: + + ```js + let dir = fileio.opendirSync(dpath); + let isSymbolicLink = dir.readSync().isSymbolicLink(); + ``` + + + +## Stream + +### createStreamSync(path:string, mode:string): Stream + +同步地获取文件流。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ------------------------------------------------------------ | + | path | string | 是 | 文件路径。 | + | mode | string | 是 | 文件访问模式,以文本方式打开文件可给定如下选项,如果要以二进制形式打开,需要在模式字符串的末尾或两个字符中间加上“b”。
r: 打开只读文件;文件必须存在。
w: 打开只写空文件;若文件已存在则舍弃原有文件内容,否则建立该文件。
a: 打开只写文件;若文件不存在,创建新文件,否则在文件末尾追加数据。
r+: 打开可读写文件;文件必须存在。
w+: 打开可读写空文件;若文件已存在则舍弃原有文件内容,否则建立该文件。
a+: 打开可读写文件;若文件不存在,创建新文件,否则在文件末尾追加数据。 | + +- 返回值: + + | 类型 | 说明 | + | :----- | :----------- | + | Stream | 表示文件流。 | + +- 示例: + + ```js + let ss = fileio.createStreamSync(path, "r+"); + ``` + + + +### fdopenStreamSync(fd:number, mode:string):Stream + +同步地将文件描述符转为文件流。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------ | ------ | ---- | ------------------------------------------------------------ | + | fd | number | 是 | 已打开文件的文件描述符。 | + | mode | string | 是 | 文件访问模式,以文本方式打开文件可给定如下选项,如果要以二进制形式打开,需要在模式字符串的末尾或两个字符中间加上“b”。
r: 打开只读文件;文件必须存在。
w: 打开只写空文件;若文件已存在则舍弃原有文件内容,否则建立该文件。
a: 打开只写文件;若文件不存在,创建新文件,否则在文件末尾追加数据。
r+: 打开可读写文件;文件必须存在。
w+: 打开可读写空文件;若文件已存在则舍弃原有文件内容,否则建立该文件。
a+: 打开可读写文件;若文件不存在,创建新文件,否则在文件末尾追加数据。 | + +- 返回值: + + | 类型 | 说明 | + | :----- | :----------- | + | Stream | 表示文件流。 | + +- 示例: + + ```js + let fd = fileio.openSync(path, 0o2); + let ss = fileio.fdopenStreamSync(fd, "r+"); + ``` + + + +### writeSync(buffer: ArrayBuffer | string, options?:Object):number + +同步地向文件流写入数据。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------- | -------------------- | ---- | ------------------------------------------------------------ | + | buffer | ArrayBuffer \|string | 是 | 待写入的数据,可来自缓冲区或字符串。 | + | options | object | 否 | 支持如下选项:
offset,number类型,表示期望写入数据的位置相对于数据首地址的偏移。可选,默认为0。
length,number类型,表示期望写入数据的长度。可选,默认缓冲区长度减去偏移长度。
position,number类型,表示期望写入文件的位置。可选,默认从当前位置开始写。
encoding,string类型,当数据是 string 类型时有效,表示数据的编码方式,默认 'utf-8',仅支持 'utf-8'。 | + +- 返回值: + + | 类型 | 说明 | + | :----- | :--------------- | + | number | 实际写入的长度。 | + +- 示例: + + ```js + let ss = fileio.createStreamSync(path, "r+"); + let writeLen = ss.writeSync('hello, world'); + ``` + + + +### flushSync():void + +同步地刷新文件流的输出缓冲区。 + +- 参数: + + 无 + +- 返回值: + + 无 + +- 示例: + + ```js + let ss = fileio.createStreamSync(path, "r+"); + let writeLen = ss.writeSync('hello, world'); + ss.flushSync(); + ``` + + + +### readSync(buffer: ArrayBuffer, options?:Object):number + +同步地从文件流读取数据。 + +- 参数: + + | 参数名 | 类型 | 必填 | 说明 | + | ------- | ----------- | ---- | ------------------------------------------------------------ | + | buffer | ArrayBuffer | 是 | 用于读取数据的缓冲区。 | + | options | Object | 否 | 支持如下选项:
offset,number 类型,表示将数据读取到缓冲区的位置,即相对于缓冲区首地址的偏移。可选,默认为0。
length,number 类型,表示期望读取数据的长度。可选,默认缓冲区长度减去偏移长度。
position,number 类型,表示期望读取文件的位置。可选,默认从当前位置开始读。 | + +- 返回值: + + | 类型 | 说明 | + | :----- | :--------------- | + | number | 实际读取的长度。 | + +- 示例: + + ```js + let ss = fileio.createStreamSync(path, "r+"); + let buf = new ArrayBuffer(4096); + let readLen = fileio.readSync(buf); + console.log(String.fromCharCode.apply(null, new Uint8Array(buf))); + ``` + + + +### closeSync():void + +同步地关闭文件流。 + +- 参数: + + 无 + +- 返回值: + + 无 + +- 示例: + + ```js + let ss = fileio.createStreamSync(path, "r+"); + ss.closeSync(); + ``` + diff --git a/zh-cn/device-dev/porting/porting-chip-board-driver.md b/zh-cn/device-dev/porting/porting-chip-board-driver.md old mode 100644 new mode 100755 diff --git a/zh-cn/device-dev/porting/porting-chip-board-hal.md b/zh-cn/device-dev/porting/porting-chip-board-hal.md old mode 100644 new mode 100755 diff --git a/zh-cn/device-dev/porting/porting-chip-faqs.md b/zh-cn/device-dev/porting/porting-chip-faqs.md old mode 100644 new mode 100755 diff --git a/zh-cn/device-dev/porting/porting-thirdparty-overview.md b/zh-cn/device-dev/porting/porting-thirdparty-overview.md old mode 100644 new mode 100755 diff --git a/zh-cn/device-dev/subsystems/subsys-densor-demo.md b/zh-cn/device-dev/subsystems/subsys-densor-demo.md old mode 100644 new mode 100755