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读取文件的代码吗?
你试一下下面的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 他们会提供更专业的帮助和解决方案。