HarmonyOS DocumentViewPicker选择的文件无法读取?

通过picker.DocumentViewPicker选择的结果获取到文件的uri,但无法读取这个uri,报No such file or directory错误。

阅读 569
1 个回答

参考示例如下:

import { BusinessError } from '@kit.BasicServicesKit';
import { common } from '@kit.AbilityKit';
import { picker } from '@kit.CoreFileKit';
import { fileIo as fs } from '@kit.CoreFileKit';

@Entry
@Component
struct Index {
  build() {
    Row() {
      Column() {
        Button('读取').onClick((event: ClickEvent) => {
          try {
            let context = getContext(this) as common.Context;
            let documentSelectOptions = new picker.DocumentSelectOptions();
            let documentPicker = new picker.DocumentViewPicker(context);
            documentPicker.select(documentSelectOptions).then((documentSelectResult: Array<string>) => {
              console.info('chen DocumentViewPicker.select successfully, documentSelectResult uri: ' +
              JSON.stringify(documentSelectResult));
              let uri: string = documentSelectResult[0];
              //这里需要注意接口权限参数是fs.OpenMode.READ_ONLY。
              let file = fs.openSync(uri, fs.OpenMode.READ_ONLY);
              console.info('tag file fd: ' + file.fd + 'url:' + file.path);
              let buffer = new ArrayBuffer(4096);
              let readLen = fs.readSync(file.fd, buffer);
              console.info('tag readSync data to file succeed and buffer size is:' + readLen);
              //读取完成后关闭fd。
              fs.closeSync(file);
            }).catch((err: BusinessError) => {
              console.error('DocumentViewPicker.select failed with err: ' + JSON.stringify(err));
            });
          } catch (error) {
            let err: BusinessError = error as BusinessError;
            console.error('DocumentViewPicker failed with err: ' + JSON.stringify(err));
          }
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进