HarmonyOS 鸿蒙Next fs.Stat 获取尺寸大小偏小

HarmonyOS 鸿蒙Next fs.Stat 获取尺寸大小偏小

let file = fs.openSync(ret.data.uri, fs.OpenMode.READ_WRITE);
let stat: fs.Stat = await fs.stat(file.fd);

通过此段代码获取的文件尺寸值偏小; 导致尾部有一顿数据读取不到,大概小1kb左右; 请问有arkts读取文件的代码吗?

2 回复

你试一下下面的demo。

2. 接收ets侧发送过来的消息。

var result = event.data;
let isObject = false;
let isArray = false;
let arr = [];
console.log(result);
try{
  arr = JSON.parse(result);
  isObject = true;
  if(Array.isArray(arr)){
    isArray = true;
  }else{
    isArray = false;
  }
}catch(error){
  console.log(`error`);
}
if (typeof(result) === 'string' && !isObject) {
  output.innerHTML = result;
} else if(typeof(result) === 'string' && isObject && !isArray){
  // 应用侧侧传过来的是对象数据
  let getObject = JSON.parse(result);
  objectData1.innerHTML = getObject.name;
  objectData2.innerHTML = getObject.age;
  objectData3.innerHTML = getObject.sex;
}else if(typeof(result) === 'string' && isObject && isArray){
  // H5侧传过来的是数组对象数据
  if (JSON.parse(result)[0] !== '第一条数据' && JSON.parse(result)[0] !== '我是第一条数据'){
    arrayData4.innerHTML = `姓名:${JSON.parse(result)[0].name} 性别:${JSON.parse(result)[0].sex} 年龄:${JSON.parse(result)[0].age}`;
    arrayData5.innerHTML = `姓名:${JSON.parse(result)[1].name} 性别:${JSON.parse(result)[1].sex} 年龄:${JSON.parse(result)[1].age}`;
    arrayData6.innerHTML = `姓名:${JSON.parse(result)[2].name} 性别:${JSON.parse(result)[2].sex} 年龄:${JSON.parse(result)[2].age}`;
  }else{
    // H5侧传过来的是数组数据
    let getArray = JSON.parse(result);
    arrayData1.innerHTML = getArray[0];
    arrayData2.innerHTML = getArray[1];
    arrayData3.innerHTML = getArray[2];
  }
}

3. 使用h5Port向应用侧发送String类型的数据。

function PostStringToEts(){
  let stringData = '来自H5侧string类型的数据';
  if (h5Port) {
    h5Port.postMessage(stringData);
  } else {
    console.log('h5Port is null, Please initialize first');
  }
}

4、使用h5Port向应用侧发送object类型的数据。

function PostObjectToEts(){
  let objData = {
    name:'张三',
    age:'18',
    sex:'男'
  }
  if (h5Port) {
    h5Port.postMessage(JSON.stringify(objData));
  } else {
    console.log('h5Port is null, Please initialize first');
  }
}

5、使用h5Port向应用侧发送Array类型的数据。

function PostArrayToEts(){
  let arrData = ['第一条数据','第二条数据','第三条数据'];
  if (h5Port) {
    h5Port.postMessage(JSON.stringify(arrData));
  } else {
    console.log('h5Port is null, Please initialize first');
  }
}

6、使用h5Port向应用侧发送数组对象嵌套类型的数据。

function PostArrayObjectToEts(){
  let arrObjData = [
    {
      name: '熊大',
      age: '18',
      sex: '男'
    },
    {
      name: '熊二',
      age: '20',
      sex: '男'
    },
    {
      name: '翠花',
      age: '22',
      sex: '女'
    },
  ];
  if (h5Port) {
    h5Port.postMessage(JSON.stringify(arrObjData));
  } else {
    console.log('h5Port is null, Please initialize first');
  }
}

7、使用h5Port向应用侧发送异步数据。

async function AsynData(){
  if (h5Port) {
    await h5Port.postMessage('倒计时3秒');
  } else {
    console.log('h5Port is null, Please initialize first');
  }
}

async function PostAsynToEts(){
  let stringData = '来自H5侧的异步数据';
  await AsynData();
  if (h5Port) {
    setTimeout(() => {
      h5Port.postMessage(stringData);
    }, 3000)
  } else {
    console.log('h5Port is null, Please initialize first');
  }
}

更多关于HarmonyOS 鸿蒙Next fs.Stat 获取尺寸大小偏小的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对帖子标题“HarmonyOS 鸿蒙Next fs.Stat 获取尺寸大小偏小”的问题,这里提供一个可能的解释及方向:

在HarmonyOS系统中,如果使用fs.Stat方法获取文件尺寸大小发现偏小,这可能是由于文件系统或fs.Stat实现本身的特性导致的。首先,确认你获取的是文件的实际大小还是可见大小。某些情况下,文件可能包含稀疏区域(即未实际写入数据的区域),这些区域在统计文件大小时可能会被忽略。

此外,检查文件是否被其他进程同时访问或修改,因为这可能导致文件大小在读取时发生变化。还要确保fs.Stat调用的是正确的文件路径,避免路径错误导致读取到不同文件的信息。

如果上述检查均无问题,考虑是否是HarmonyOS特定的文件系统或API行为导致。HarmonyOS可能使用了不同于传统Linux或其他操作系统的文件系统机制,这可能会影响fs.Stat的行为。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 他们会提供更专业的帮助和解决方案。

回到顶部