边读边写都不对

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