• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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