HarmonyOS 鸿蒙Next 选择文件后通过文件地址获取文件大小报错 no such file

发布于 1周前 作者 nodeper 最后一次编辑是 5天前 来自 鸿蒙OS

选择文件后通过文件地址获取文件大小报错no such file 已解决 选择文件后通过文件地址获取文件大小报错no such file

在做文件切片上传的过程中。通过picker.DocumentViewPicker的select方法选择了“我的手机”->“文档”下的文件,可以正常获取到文件地址。 第一步openSync打开文件步骤可以正常执行 第二步使用lstatSync方法会导致No such file or directory报错。 目前通过fs.copyFile复制了一份文件暂时绕开了这个问题。但是如果对于较大文件来说这个方法不是很合适,请问一下有其他的解决方案么? DEMO在执行到“let stat = fs.lstatSync(this.selectedFileUri);”这段代码时会抛出异常。

DEMO代码如下:

import { BusinessError } from '@kit.BasicServicesKit';
import picker from '@ohos.file.picker';
import { common } from '@kit.AbilityKit';
import fs from '@ohos.file.fs';

@Entry
@Component
struct Index {

  @State selectedFileUri:string = ""

  build() {
    Column(){
      Button("选择文件")
        .onClick(()=>{
          this.pickFile()
        })
    }
    .justifyContent(FlexAlign.Center)
    .width('100%')
    .height('100%')
  }

  pickFile(){
    try {
      let documentSelectOptions = new picker.DocumentSelectOptions();
      let context = getContext(this) as common.Context;
      let documentPicker = new picker.DocumentViewPicker(context);
      documentPicker.select(documentSelectOptions).then((documentSelectResult: Array<string>) => {
        if (documentSelectResult.length > 0) {
          this.selectedFileUri = documentSelectResult[0]
          // 读取
          let file2 = fs.openSync(this.selectedFileUri, 0o2);
          let stat = fs.lstatSync(this.selectedFileUri);
          let buf2 = new ArrayBuffer(stat.size);
          fs.readSync(file2.fd, buf2); // 以同步方法从流文件读取数据。
          fs.fsyncSync(file2.fd);
          fs.closeSync(file2.fd);
        }
      }).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));
    }
  }
}

更多关于HarmonyOS 鸿蒙Next 选择文件后通过文件地址获取文件大小报错 no such file的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

使用 fs.statSync(file2.fd)来读取文件fd

深色代码主题
复制
import { BusinessError } from '@kit.BasicServicesKit';
import picker from '@ohos.file.picker';
import { common } from '@kit.AbilityKit';
import fs from '@ohos.file.fs';
@Entry
@Component
struct Index {
  @State selectedFileUri:string = ""
  build() {
    Column(){
      Button("选择文件")
        .onClick(()=>{
          this.pickFile()
        })
    }
    .justifyContent(FlexAlign.Center)
    .width('100%')
    .height('100%')
  }
  pickFile(){
    try {
      let documentSelectOptions = new picker.DocumentSelectOptions();
      let context = getContext(this) as common.Context;
      let documentPicker = new picker.DocumentViewPicker(context);
      documentPicker.select(documentSelectOptions).then((documentSelectResult: Array<string>) => {
        if (documentSelectResult.length > 0) {
          this.selectedFileUri = documentSelectResult[0]
          // 读取
          let file2 = fs.openSync(this.selectedFileUri, 0o2);
          let stat = fs.statSync(file2.fd);
          let buf2 = new ArrayBuffer(stat.size);
          fs.readSync(file2.fd, buf2); // 以同步方法从流文件读取数据。
          fs.fsyncSync(file2.fd);
          fs.closeSync(file2.fd);
        }
      }).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));
    }
  }
}

更多关于HarmonyOS 鸿蒙Next 选择文件后通过文件地址获取文件大小报错 no such file的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,遇到通过文件地址获取文件大小时报错“no such file”,通常表示系统无法找到指定的文件路径。这种情况可能由以下几个原因造成:

  1. 路径错误:检查提供的文件路径是否正确,包括路径中的文件夹名称和文件名是否完全匹配,以及路径分隔符是否符合鸿蒙系统的规范。

  2. 权限问题:应用可能没有足够的权限访问该文件。确保应用已声明了访问文件所需的权限,并在运行时请求并获得了这些权限。

  3. 文件不存在:文件可能已被删除或移动,导致路径无效。确认文件在尝试访问时仍然存在于指定位置。

  4. 存储介质问题:如果文件存储在外部存储或特定分区,确保该存储介质已正确挂载且可访问。

  5. API使用不当:检查用于获取文件大小的API调用是否正确。确保使用了鸿蒙系统提供的正确方法和参数。

针对以上情况,逐一排查并修正问题。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。确保提供详细的错误信息和相关代码,以便客服能够更准确地定位问题并提供帮助。

回到顶部