预期:我在本地路径生成一个文件aaa.pwb,然后再使用聊天文件导入bbb.pwb,覆盖aaa.pwb,我希望bbb.pwb读取到的内容是正确的,然而我实际读取的内容是aaa.pwb,我copyFile后,读取到的内容还是aaa.pwb内容,我即使选择了ccc.pwb,还是读取到了aaa.pwb内容。
查看日志,有报错:
不知道这个报错是否和此问题相关,但可以确定的是,选择文件后,显示的文件名称和尺寸是和源文件匹配的,但是读取的内容和原文件不一致。
使用的代码如下:
chooseFile() {
wx.chooseMessageFile({
count: 1,
type: 'file',
extension: ['bak'],
success: (res) => {
const file = res.tempFiles[0];
console.log(`选择文件[版本${this.data.fileVersion}]:`, file.name);
// 读取文件内容
this.readViaCopy(file);
},
fail: (err) => {
console.error('选择文件失败:', err);
}
});
},
readViaCopy(file) {
const fs = wx.getFileSystemManager();
const newPath = `${wx.env.USER_DATA_PATH}/temp_${Date.now()}.pwb`;
console.log('原始路径:', file.path);
console.log('新路径:', newPath);
try {
// 1. 复制到新路径
fs.copyFileSync(file.path, newPath);
console.log('复制成功');
// 2. 读取新文件
const content = fs.readFileSync(newPath, 'utf-8');
console.log('读取成功,长度:', content.length);
console.log('读取成功,内容:', content);
// 3. 显示结果
wx.showModal({
title: '复制读取法',
content: `文件: ${file.name}\n新路径: ${newPath}\n内容长度: ${content.length}\n}`,
showCancel: false
});
// 4. 清理
setTimeout(() => {
try {
fs.unlinkSync(newPath);
console.log('清理完成');
} catch (e) {}
}, 1000);
} catch (error) {
console.error('复制法失败:', error);
wx.showModal({
title: '错误',
content: '复制法失败: ' + error.message,
showCancel: false
});
}
},
可模拟步骤,在一个页面中,创建一个导入按钮,页面启动时,先读取aaa.pwb内容,然后展示到页面,然后点击导入按钮,弹出选择聊天文件对话框,选择文件,然后读取内容后再展示出来,发现是aaa.pwb内容。
