HarmonyOS鸿蒙Next中应用内统计内置存储总空间和已用空间大小没找到相关API接口

HarmonyOS鸿蒙Next中应用内统计内置存储总空间和已用空间大小没找到相关API接口 应用内需要统计内置存储的总空间大小和已用空间等,但是发现这块相关的API是系统接口,用不了,使用文件系统空间接口查询到的跟手机实际存储空间又有些出入,产品需求及接口返回结果如下所示,有其他方案实现吗? 是否有其他接口,可供三方应用使用,或者是否有开放该接口计划,该接口目前是系统接口:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-file-storage-statistics-V5

问题场景描述: 应用内有个下载场景需要用到存储空间统计,并向用户展示


更多关于HarmonyOS鸿蒙Next中应用内统计内置存储总空间和已用空间大小没找到相关API接口的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

针对三方或者磁盘总大小,以及已使用空间大小问题,当前通过文件系统接口获取

statvfs.getTotalSize('/data/storage/el1/bundle').then((number: number) => {
  console.log('total size:' + number / 1024 / 1024 / 1024);
})
statvfs.getFreeSize('/data/storage/el1/bundle').then((number: number) => {
  console.log('free size:' + number / 1024 / 1024 / 1024);
})

单应用沙箱缓存目录使用情况需采用fs接口实现,参考示例代码:

import fs from '@ohos.file.fs';
import { promptAction } from '@kit.ArkUI';
/**
 * 每个应用的缓存目录:
 * /data/app/el2/100/base/xxxx应用包名/haps/entry/cache
 */
@Entry
@Component
struct Index {
  private path: string = '';

  getCachedTotalSize(pathDir: string, callback: Function) {
    fs.listFiles(pathDir).then((fileNameArray: string[]) => {
      console.info(`${pathDir} 下包含文件数:${fileNameArray.length}`);
      let totalSize = 0;
      try {
        for (let fileName of fileNameArray) {
          let stat = fs.statSync(pathDir + "/" + fileName)
          console.info(`${pathDir} file:${fileName} size:${stat.size}`)
          totalSize += stat.size;
        }
        callback(totalSize);
      } catch (err) {
        console.error(`stat error: ${err.message}`);
        callback(-1);
      }
    })
  }

  build() {
    Row() {
      Column() {
        Text(this.path).fontSize(50).fontWeight(FontWeight.Bold)
        Button('点击统计总字节数').onClick(() => {
          this.path = getContext().cacheDir;
          this.getCachedTotalSize(this.path, (totalSize: number) => {
            promptAction.showToast({ message: `${this.path} 的总字节数:${totalSize}`, duration: 1000 })
          });
        });
      }.width('100%')
    }.height('100%')
  }
}

更多关于HarmonyOS鸿蒙Next中应用内统计内置存储总空间和已用空间大小没找到相关API接口的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)Next中,应用内统计内置存储总空间和已用空间大小的功能,目前官方API文档中确实没有直接提供相关的接口。鸿蒙系统的存储管理主要依赖于ohos.fileohos.storage等模块,但这些模块主要关注文件操作和存储路径管理,并未提供直接获取存储空间使用情况的API。

如果你需要获取存储空间的使用情况,可能需要通过系统提供的其他方式间接实现。例如,可以通过遍历文件系统来计算已用空间,但这并不是一个高效且准确的方法,尤其是对于大型存储设备。此外,鸿蒙系统对文件访问权限有严格限制,应用通常只能访问自身的私有目录和部分公共目录,这也会限制你获取全局存储信息的准确性。

考虑到鸿蒙系统的设计理念,存储空间的统计功能可能更多地由系统管理,而非应用层直接操作。如果你确实需要这一功能,建议关注鸿蒙系统的更新和开发者文档的变动,未来可能会引入相关的API支持。

在HarmonyOS鸿蒙Next中,获取应用内存储空间的总大小和已用大小可以通过Context类中的getFilesDir()getCacheDir()方法获取应用内部存储路径,然后使用StatFs类来计算总空间和可用空间。具体实现如下:

import ohos.app.Context;
import ohos.global.resource.StatFs;

public class StorageUtils {
    public static long getTotalInternalStorageSize(Context context) {
        StatFs statFs = new StatFs(context.getFilesDir().getPath());
        return statFs.getTotalBytes();
    }

    public static long getAvailableInternalStorageSize(Context context) {
        StatFs statFs = new StatFs(context.getFilesDir().getPath());
        return statFs.getAvailableBytes();
    }
}

通过这些方法,你可以获取应用内存储空间的总大小和可用大小。

回到顶部