一、概述
在系统中,可能出现系统空间不够或者cacheDir等目次受系统配额限制等情况,必要应用开辟者关注系统剩余空间,同时控制应用自身占用的空间大小。
二、接口说明
表1 文件系统空间和应用空间统计
模块
| 接口名
| 功能
| @ohos.file.storageStatistics
| getCurrentBundleStats
| 获取当前应用的存储空间大小(单元为Byte)。
| @ohos.file.storageStatistics
| getFreeSize
| 异步获取内置存储的可用空间大小(单元为Byte)。
说明:从API version 15开始,支持该接口。
| @ohos.file.storageStatistics
| getFreeSizeSync
| 同步获取内置存储的可用空间大小(单元为Byte)。
说明:从API version 15开始,支持该接口。
| @ohos.file.storageStatistics
| getTotalSize
| 异步获取内置存储的总空间大小(单元为Byte)。
说明:从API version 15开始,支持该接口。
| @ohos.file.storageStatistics
| getTotalSizeSync
| 同步获取内置存储的总空间大小(单元为Byte)。
说明:从API version 15开始,支持该接口。
| @ohos.file.statvfs
| getFreeSize
| 获取指定文件系统的剩余空间大小(单元为Byte)。
| @ohos.file.statvfs
| getTotalSize
| 获取指定文件系统的总空间大小(单元为Byte)。
| 表2 应用空间统计
留意 表格中统计路径列涉及的目次均指应用的沙箱路径,查看路径前必要先进入对应的应用沙箱空间 进入沙箱空间必要实行以下命令:
- hdc shell。
- nsenter -t {pid} -m sh。
BundleStats属性
| 寄义
| 统计路径
| appSize
| 应用安装文件大小(单元为Byte)
| 应用安装文件生存在以下目次:
| cacheSize
| 应用缓存文件大小(单元为Byte)
| 应用的缓存文件生存在以下目次:
/data/storage/el1/base/cache
/data/storage/el1/base/haps/entry/cache
/data/storage/el2/base/cache
/data/storage/el2/base/haps/entry/cache
| dataSize
| 应用文件存储大小(除应用安装文件和缓存文件)(单元为Byte)
| 应用文件由本地文件、分布式文件以及数据库文件组成。本地文件生存在以下目次(留意缓存文件目次为以下目次的子目次):
/data/storage/el1/base
/data/storage/el2/base
分布式文件生存在以下目次:
/data/storage/el2/distributedfiles
数据库文件生存在以下目次:
/data/storage/el1/database
/data/storage/el2/database
| 三、 开辟示例
3.1 获取文件系统数据分区剩余空间大小
效果图
示例代码
getFreeSize 方法源码
登录后复制 - function getFreeSize() {
- statfs.getFreeSize(path, (err: BusinessError, number: number) => {
- // number 单位是字节
- if (err) {
- console.error(`获取文件系统数据分区剩余空间大小 失败, code is ${err.code}, message is ${err.message}`);
- } else {
- let sizeG = number / (1024 * 1024 * 1024) // 转换 GB
- console.info(`获取文件系统数据分区剩余空间大小 成功, size is ${number} 字节 , size = ${sizeG} GB`);
- }
- });
- }
复制代码
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
3.2 获取当前应用的存储空间大小
效果图
示例代码
登录后复制 - function getStorageStatistics(){
- storageStatistics.getCurrentBundleStats((err: BusinessError, bundleStats: storageStatistics.BundleStats) => {
- if (err) {
- console.error(`获取当前应用的存储空间大小 失败, code is ${err.code}, message is ${err.message}`);
- } else {
- let appSizeM = bundleStats.appSize / (1024 * 1024 ) // 转换 MB
- console.info(`获取当前应用的存储空间大小 成功, appsize is ${bundleStats.appSize} , appSizeM = ${appSizeM}`);
- }
- });
- }
复制代码
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
3.3 异步获取内置存储的总空间大小
示例代码
getTotalSize方法 源码
登录后复制 - function getTotalSize(){
- storageStatistics.getTotalSize().then((number: number) => {
- console.info(`异步获取内置存储的总空间大小 successfully, number is ${number}`);
- }).catch((err: BusinessError) => {
- console.error(`异步获取内置存储的总空间大小 error, code is ${err.code}, message is ${err.message}`);
- });
- }
复制代码
3.4 同步获取内置存储的总空间大小
效果图
示例代码
getTotalSizeSync 方法源码
登录后复制 - function getTotalSizeSync() {
- try {
- let number = storageStatistics.getTotalSizeSync();
- console.info(`getTotalSizeSync successfully, number is ${number}`);
- } catch (err) {
- let error: BusinessError = err as BusinessError;
- console.error(`getTotalSizeSync failed with error, code is ${error.code}, message is ${error.message}`);
- }
- }
复制代码
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
3.5 异步获取内置存储的可用空间大小
示例代码
getFreeSize方法源码
登录后复制 - function getFreeSizeAsync(){
- storageStatistics.getFreeSize().then((number: number) => {
- console.info(`getFreeSize successfully, number is ${number}`);
- }).catch((err: BusinessError) => {
- console.error(`getFreeSize failed with error, code is ${err.code}, message is ${err.message}`);
- });
- }
复制代码
3.6 同步获取内置存储的可用空间大小
示例代码
getFreeSizeSync方法源码
登录后复制 - function getFreeSizeSync(){
- try {
- let number = storageStatistics.getFreeSizeSync();
- console.info(`getFreeSizeSync successfully, number is ${number}`);
- } catch (err) {
- let error: BusinessError = err as BusinessError;
- console.error(`getFreeSizeSync failed with error, code is ${error.code}, message is ${error.message}`);
- }
- }
复制代码
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
四、示例完整代码
登录后复制 - import { statfs, storageStatistics } from '@kit.CoreFileKit';import { BusinessError } from '@kit.BasicServicesKit';import { common } from '@kit.AbilityKit';let context = getContext(this) as common.UIAbilityContext;let path = context.filesDir;/** * 获取文件系统数据分区剩余空间大小 */function getFreeSize() {
- statfs.getFreeSize(path, (err: BusinessError, number: number) => {
- // number 单位是字节
- if (err) {
- console.error(`获取文件系统数据分区剩余空间大小 失败, code is ${err.code}, message is ${err.message}`);
- } else {
- let sizeG = number / (1024 * 1024 * 1024) // 转换 GB
- console.info(`获取文件系统数据分区剩余空间大小 成功, size is ${number} 字节 , size = ${sizeG} GB`);
- }
- });
- }/** * 获取当前应用的存储空间大小 */function getStorageStatistics() { storageStatistics.getCurrentBundleStats((err: BusinessError, bundleStats: storageStatistics.BundleStats) => { if (err) { console.error(`获取当前应用的存储空间大小 失败, code is ${err.code}, message is ${err.message}`); } else { let appSizeM = bundleStats.appSize / (1024 * 1024) // 转换 MB console.info(`获取当前应用的存储空间大小 成功, appsize is ${bundleStats.appSize} , appSizeM = ${appSizeM}`); } });}/** * 异步获取内置存储的总空间大小 */function getTotalSize() { storageStatistics.getTotalSize().then((number: number) => { console.info(`异步获取内置存储的总空间大小 successfully, number is ${number}`); }).catch((err: BusinessError) => { console.error(`异步获取内置存储的总空间大小 error, code is ${err.code}, message is ${err.message}`); // is not a system application });}/** * 同步获取内置存储的总空间大小 */function getTotalSizeSync() { try { let number = storageStatistics.getTotalSizeSync(); console.info(`getTotalSizeSync successfully, number is ${number}`); } catch (err) { let error: BusinessError = err as BusinessError; console.error(`getTotalSizeSync failed with error, code is ${error.code}, message is ${error.message}`); // getTotalSizeSync failed with error, code is 202, message is The caller is not a system application }}/** * 异步获取内置存储的可用空间大小 */function getFreeSizeAsync() { storageStatistics.getFreeSize().then((number: number) => { console.info(`getFreeSize successfully, number is ${number}`); }).catch((err: BusinessError) => { console.error(`getFreeSize failed with error, code is ${err.code}, message is ${err.message}`); // is not a system application });}/** * 同步获取内置存储的可用空间大小 */function getFreeSizeSync() { try { let number = storageStatistics.getFreeSizeSync(); console.info(`getFreeSizeSync successfully, number is ${number}`); } catch (err) { let error: BusinessError = err as BusinessError; console.error(`getFreeSizeSync failed with error, code is ${error.code}, message is ${error.message}`); // is not a system application }}@Builderfunction BaseButton(btnName: string, eventType: number) { Column() { Button(btnName) .fontColor(Color.Black) .fontSize(20) .fontWeight(FontWeight.Medium) .onClick(() => { if (eventType == 1) { getFreeSize() return } if (eventType == 2) { getStorageStatistics() return } if (eventType == 3) { getTotalSize() return } if (eventType == 4) { getTotalSizeSync() return } if (eventType == 5) { getFreeSizeAsync() return } if (eventType == 6) { getFreeSizeSync() return } }) }}@Entry@Componentstruct TeststorageSize { @State message: string = '应用及文件系统空间统计'; build() { Column({ space: 10 }) { Text(this.message) .id('TeststorageSizeHelloWorld') .fontSize($r('app.float.page_text_font_20fp')) .fontWeight(FontWeight.Bold) .margin({ top: 20 }) BaseButton('获取文件系统数据分区剩余空间大小', 1) BaseButton('获取当前应用的存储空间大小', 2) BaseButton('异步获取内置存储的总空间大小', 3) BaseButton('同步获取内置存储的总空间大小', 4) BaseButton('异步获取内置存储的可用空间大小', 5) BaseButton('同步获取内置存储的可用空间大小', 6) } .height('100%') .width('100%') }}
复制代码
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
- 77.
- 78.
- 79.
- 80.
- 81.
- 82.
- 83.
- 84.
- 85.
- 86.
- 87.
- 88.
- 89.
- 90.
- 91.
- 92.
- 93.
- 94.
- 95.
- 96.
- 97.
- 98.
- 99.
- 100.
- 101.
- 102.
- 103.
- 104.
- 105.
- 106.
- 107.
- 108.
- 109.
- 110.
- 111.
- 112.
- 113.
- 114.
- 115.
- 116.
- 117.
- 118.
- 119.
- 120.
- 121.
- 122.
- 123.
- 124.
- 125.
- 126.
- 127.
- 128.
- 129.
- 130.
- 131.
- 132.
- 133.
- 134.
- 135.
- 136.
- 137.
- 138.
- 139.
- 140.
- 141.
- 142.
- 143.
- 144.
- 145.
- 146.
- 147.
- 148.
- 149.
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|