1# 应用及文件系统空间统计 2<!--Kit: Core File Kit--> 3<!--Subsystem: FileManagement--> 4<!--Owner: @wang_zhangjun; @zhuangzhuang--> 5<!--Designer: @wang_zhangjun; @zhuangzhuang; @renguang1116--> 6<!--Tester: @liuhonggang123; @yue-ye2; @juxiaopang--> 7<!--Adviser: @foryourself--> 8 9在系统中,可能出现系统空间不够或者cacheDir等目录受系统配额限制等情况,需要应用开发者关注系统剩余空间,同时控制应用自身占用的空间大小。 10 11## 接口说明 12 13API的详细介绍请参见[ohos.file.statvfs](../reference/apis-core-file-kit/js-apis-file-statvfs.md)、[ohos.file.storageStatistics](../reference/apis-core-file-kit/js-apis-file-storage-statistics.md)。 14 15**表1** 文件系统空间和应用空间统计 16 17| 模块 | 接口名 | 功能 | 18| -------- | -------- | -------- | 19| \@ohos.file.storageStatistics | getCurrentBundleStats | 获取当前应用的存储空间大小(单位为Byte)。| 20| \@ohos.file.storageStatistics | getFreeSize | 异步获取内置存储的可用空间大小(单位为Byte)。<br>**说明**:从API version 15开始,支持该接口。 | 21| \@ohos.file.storageStatistics | getFreeSizeSync | 同步获取内置存储的可用空间大小(单位为Byte)。<br>**说明**:从API version 15开始,支持该接口。 | 22| \@ohos.file.storageStatistics | getTotalSize | 异步获取内置存储的总空间大小(单位为Byte)。<br>**说明**:从API version 15开始,支持该接口。 | 23| \@ohos.file.storageStatistics | getTotalSizeSync | 同步获取内置存储的总空间大小(单位为Byte)。<br>**说明**:从API version 15开始,支持该接口。 | 24| \@ohos.file.statvfs | getFreeSize | 获取指定文件系统的剩余空间大小(单位为Byte)。| 25| \@ohos.file.statvfs | getTotalSize | 获取指定文件系统的总空间大小(单位为Byte)。| 26 27**表2** 应用空间统计 28 29> **注意:** 30> 31> 表格中统计路径列涉及的目录均指应用的沙箱路径,查看路径前需要先进入对应的应用沙箱空间。进入沙箱空间需要执行以下命令: 32> 33> 1. hdc shell。 34> 2. nsenter -t {pid} -m sh。 35 36| BundleStats属性 | 含义 | 统计路径 | 37| -------- | -------- | -------- | 38| appSize | 应用安装文件大小(单位为Byte) | 应用安装文件保存在以下目录:<br/>/data/storage/el1/bundle | 39| cacheSize | 应用缓存文件大小(单位为Byte) | 应用的缓存文件保存在以下目录:<br/>/data/storage/\${el1-el5}/base/cache<br/>/data/storage/\${el1-el5}/base/haps/\${moduleName}/cache<br/>/data/storage/el2/sharefiles/cache<br/>/data/storage/el2/sharefiles/haps/${moduleName}/cache<br/> **说明**:\${el1-el5}指的是[el1,el2,el3,el4,el5目录](./app-sandbox-directory.md#应用文件目录与应用文件路径)。\${moduleName}是模块名。 | 40| dataSize | 应用文件存储大小(除应用安装文件)(单位为Byte) | 应用文件通常由本地文件、分布式文件、数据库文件等部分组成。<br/>本地文件保存在以下目录(注意缓存文件目录为以下目录的子目录):<br/>/data/storage/\${el1-el5}/base<br/>分布式文件保存在以下目录:<br/>/data/storage/el2/distributedfiles<br/>数据库文件保存在以下目录:<br/>/data/storage/\${el1-el5}/database<br/> **说明**:\${el1-el5}指的是[el1,el2,el3,el4,el5目录](./app-sandbox-directory.md#应用文件目录与应用文件路径)。 | 41 42## 开发示例 43 44- 获取文件系统数据分区剩余空间大小。 45 46 ```ts 47 import { statfs } from '@kit.CoreFileKit'; 48 import { BusinessError } from '@kit.BasicServicesKit'; 49 import { common } from '@kit.AbilityKit'; 50 51 // 请在组件内获取context,确保this.getUIContext().getHostContext()返回结果为UIAbilityContext 52 let context = this.getUIContext().getHostContext() as common.UIAbilityContext; 53 let path = context.filesDir; 54 statfs.getFreeSize(path, (err: BusinessError, number: number) => { 55 if (err) { 56 console.error(`Invoke getFreeSize failed, code is ${err.code}, message is ${err.message}`); 57 } else { 58 console.info(`Invoke getFreeSize succeeded, size is ${number}`); 59 } 60 }); 61 ``` 62 63- 获取当前应用的存储空间大小。 64 65 ```ts 66 import { storageStatistics } from '@kit.CoreFileKit'; 67 import { BusinessError } from '@kit.BasicServicesKit'; 68 69 storageStatistics.getCurrentBundleStats((err: BusinessError, bundleStats: storageStatistics.BundleStats) => { 70 if (err) { 71 console.error(`Invoke getCurrentBundleStats failed, code is ${err.code}, message is ${err.message}`); 72 } else { 73 console.info(`Invoke getCurrentBundleStats succeeded, appsize is ${bundleStats.appSize}`); 74 } 75 }); 76 ``` 77 78- 异步获取内置存储的总空间大小。 79 80 ```ts 81 import { storageStatistics } from '@kit.CoreFileKit'; 82 import { BusinessError } from '@kit.BasicServicesKit'; 83 84 storageStatistics.getTotalSize().then((number: number) => { 85 console.info(`getTotalSize successfully, number is ${number}`); 86 }).catch((err: BusinessError) => { 87 console.error(`getTotalSize failed with error, code is ${err.code}, message is ${err.message}`); 88 }); 89 ``` 90 91- 同步获取内置存储的总空间大小。 92 93 ```ts 94 import { storageStatistics } from '@kit.CoreFileKit'; 95 import { BusinessError } from '@kit.BasicServicesKit'; 96 97 try { 98 let number = storageStatistics.getTotalSizeSync(); 99 console.info(`getTotalSizeSync successfully, number is ${number}`); 100 } catch (err) { 101 let error: BusinessError = err as BusinessError; 102 console.error(`getTotalSizeSync failed with error, code is ${error.code}, message is ${error.message}`); 103 } 104 ``` 105 106- 异步获取内置存储的可用空间大小。 107 108 ```ts 109 import { storageStatistics } from '@kit.CoreFileKit'; 110 import { BusinessError } from '@kit.BasicServicesKit'; 111 112 storageStatistics.getFreeSize().then((number: number) => { 113 console.info(`getFreeSize successfully, number is ${number}`); 114 }).catch((err: BusinessError) => { 115 console.error(`getFreeSize failed with error, code is ${err.code}, message is ${err.message}`); 116 }); 117 ``` 118 119- 同步获取内置存储的可用空间大小。 120 121 ```ts 122 import { storageStatistics } from '@kit.CoreFileKit'; 123 import { BusinessError } from '@kit.BasicServicesKit'; 124 125 try { 126 let number = storageStatistics.getFreeSizeSync(); 127 console.info(`getFreeSizeSync successfully, number is ${number}`); 128 } catch (err) { 129 let error: BusinessError = err as BusinessError; 130 console.error(`getFreeSizeSync failed with error, code is ${error.code}, message is ${error.message}`); 131 } 132 ``` 133