HarmonyOS 鸿蒙Next 判断文件能否读取的实现咨询

发布于 1周前 作者 nodeper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 判断文件能否读取的实现咨询

对于一个入参path,可能是应用沙箱路径或者文件URI,file://media/xxx这种,如何判断这个文件是否存在,更准确的说是否可读

对于应用沙箱路径可以用fs.access,对于公共目录的fileURI就无法判断了,有其他接口吗或者直接用fs.open 尝试读一下

2 回复

这种目录由于安全问题不能直接使用fs.open,只能通过相应的选择器访问。 按理来说已经保存的图片有了resultUri是可以读的,使用fs.open就行。参考demo:拍照后跳转其他页面展示出该图片

import picker from '@ohos.multimedia.cameraPicker';

import camera from '@ohos.multimedia.camera';

import common from '@ohos.app.ability.common';

import { BusinessError } from '@ohos.base';

import fs from '@ohos.file.fs';

import { router } from '@kit.ArkUI';

@Entry

@Component

struct Index48 {

  build() {

    Column(){

      Button('to展示').onClick(() => {

        router.pushUrl({url: 'pages/arc'})

      })

      Button("先拍照")

        .onClick(async ()=>{

          let mContext = getContext(this) as common.Context;

          try {

            let pickerProfile: picker.PickerProfile = {

              cameraPosition: camera.CameraPosition.CAMERA_POSITION_BACK

            };

            await picker.pick(mContext, [picker.PickerMediaType.PHOTO, picker.PickerMediaType.VIDEO], pickerProfile)

              .then((pickerResult: picker.PickerResult) => {

                let photouri: string = pickerResult.resultUri

                console.log("photouri"+JSON.stringify(photouri))

                try {

                  AppStorage.setOrCreate('file',photouri)

                  let file = fs.openSync(photouri, fs.OpenMode.READ_ONLY)

                  fs.closeSync(file);

                  console.info('success')

                }catch (error)

                {

                  console.error(error)

                }

              })

          } catch (error) {

            let err = error as BusinessError;

            console.error(`the pick call failed. error code: ${err.code}`);

          }

        })

    }

  }

}

展示页面:

@Entry

@Component

struct Arc {

  @State url: string | undefined =''

  aboutToAppear(): void {

    this.url = AppStorage.get('file')

  }

  build() {

    Column() {

      Image(this.url)

    }

    .width('100%')

    .height('100%')

    .backgroundColor(Color.Red)

  }

}

更多关于HarmonyOS 鸿蒙Next 判断文件能否读取的实现咨询的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS 鸿蒙Next系统中,判断文件能否读取通常涉及文件系统访问权限及文件存在性检查。你可以使用鸿蒙系统提供的文件I/O接口来实现这一功能。

具体实现步骤如下:

  1. 引入必要的头文件: 你需要引入鸿蒙系统提供的文件系统头文件,例如fileio.h,用于文件操作。

  2. 打开文件: 使用open函数尝试以只读方式打开文件。open函数的返回值会指示操作是否成功。

  3. 检查返回值: 如果open函数返回的文件描述符大于或等于0,表示文件成功打开,即文件可读。否则,如果返回-1,表示文件打开失败,可能原因是文件不存在或没有读取权限。

  4. 关闭文件: 无论文件是否成功打开,最后都需要使用close函数关闭文件描述符,以释放资源。

示例代码(简化版):

#include "fileio.h"

int canReadFile(const char *filePath) {
    int fd = open(filePath, O_RDONLY);
    if (fd >= 0) {
        close(fd);
        return 1; // 文件可读
    }
    return 0; // 文件不可读
}

请注意,上述代码示例是基于鸿蒙系统的文件I/O接口,未包含错误处理细节。在实际应用中,应添加必要的错误处理逻辑。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部