收藏
回答

选择聊天文件后然后读取内容,读取到的内容一直是缓存中的内容或者本地用户文件读取内容

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug 文件系统的readfile 工具 8.0.53 3.0.2

预期:我在本地路径生成一个文件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内容。

回答关注问题邀请回答
收藏

1 个回答

  • 智能回答 智能回答 本次回答由AI生成
    11-30
    有用
登录 后发表内容