边读边写都不对

This commit is contained in:
cheney 2026-04-30 17:43:09 +08:00
parent 917af8fc32
commit 57187ada83

View File

@ -159,8 +159,8 @@
var len = '000000' + datalen
len = len.substr(len.length - 6)
writeData(app, filename, 0, datalen + 3, len+data)
PrintInfo("写入成功");
writeData(app, filename, 0, datalen + 3, (len+data).toUpperCase())
PrintInfo("写入成功 File");
} catch (e) {
PrintInfo(e.message);
}
@ -181,12 +181,28 @@
}
function writeData(app, filename, offset, datalen, data) {
if (datalen <= 1000) {
var block = 512;
if (datalen <= block) {
SKFKEY.SKF_WriteFile(app, filename, offset, datalen, data);
} else {
// 先写入 1000
SKFKEY.SKF_WriteFile(app, filename, offset, 1000, data.substr(0, 2000));
writeData(app, filename, offset + 1000, datalen - 1000, data.substr(2000))
// 先写入 block
var cdata = data.substr(0, block * 2)
SKFKEY.SKF_WriteFile(app, filename, offset, block, cdata);
// 检查
var result = SKFKEY.SKF_ReadFile(app, filename, offset, block);
if(result == cdata){
PrintInfo("写入成功" + offset);
} else {
PrintInfo("写入失败" + offset);
PrintInfo("写入" + cdata);
PrintInfo("读取" + result);
}
setTimeout(() => {
writeData(app, filename, offset + block, datalen - block, data.substr(block * 2))
}, 1000);
}
}
@ -224,29 +240,31 @@
// }
// }
function readData(app, filename, offset, datalen) {
// 最终结果
let result = '';
// 每次最大读取长度
const MAX_READ = 1000;
let result = SKFKEY.SKF_ReadFile(app, filename, offset, readLen);
// 循环分段读取(比递归更安全、更易读)
while (datalen > 0) {
// 本次读取长度:取 2000 和剩余长度的较小值
const readLen = Math.min(MAX_READ, datalen);
// // 最终结果
// let result = '';
// // 每次最大读取长度
// const MAX_READ = 1000;
// 读取一段数据
const chunk = SKFKEY.SKF_ReadFile(app, filename, offset, readLen);
// // 循环分段读取(比递归更安全、更易读)
// while (datalen > 0) {
// // 本次读取长度:取 2000 和剩余长度的较小值
// const readLen = Math.min(MAX_READ, datalen);
// 拼接到结果
result += chunk;
// // 读取一段数据
// const chunk = SKFKEY.SKF_ReadFile(app, filename, offset, readLen);
// 偏移量前进
offset += readLen;
// 剩余长度减少
datalen -= readLen;
}
// // 拼接到结果
// result += chunk;
// 最终返回完整数据
// // 偏移量前进
// offset += readLen;
// // 剩余长度减少
// datalen -= readLen;
// }
// // 最终返回完整数据
return result;
}