HarmonyOS 鸿蒙Next 选择文件后通过文件地址获取文件大小报错 no such file
选择文件后通过文件地址获取文件大小报错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
使用 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”,通常表示系统无法找到指定的文件路径。这种情况可能由以下几个原因造成:
-
路径错误:检查提供的文件路径是否正确,包括路径中的文件夹名称和文件名是否完全匹配,以及路径分隔符是否符合鸿蒙系统的规范。
-
权限问题:应用可能没有足够的权限访问该文件。确保应用已声明了访问文件所需的权限,并在运行时请求并获得了这些权限。
-
文件不存在:文件可能已被删除或移动,导致路径无效。确认文件在尝试访问时仍然存在于指定位置。
-
存储介质问题:如果文件存储在外部存储或特定分区,确保该存储介质已正确挂载且可访问。
-
API使用不当:检查用于获取文件大小的API调用是否正确。确保使用了鸿蒙系统提供的正确方法和参数。
针对以上情况,逐一排查并修正问题。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。确保提供详细的错误信息和相关代码,以便客服能够更准确地定位问题并提供帮助。