fs.open is not a function 到底是怎么一回事?
发布于 4 年前 作者 gangwu 3288 次浏览 来自 官方Issues

 const fs = wx.getFileSystemManager()

    fs.open({

      filePath: `${wx.env.USER_DATA_PATH}/hello.txt`,

      flag: 'a+',

      success(res) {

        console.log(res.fd)

      }

    })

这段代码是从官方文档复制下来的,运行时却报“fs.open is not a function”。

但我在另一个js中,用fs.savefile却成功把下载的文件保存到本地,代码如下:

wx.getFileSystemManager().saveFile({

            tempFilePath:res1.tempFilePath,

            filePath:wx.env.USER_DATA_PATH+'/'+thisname,

            success:(res2)=>{

                    wx.showToast({

                      title: '文件已保存到'+res2.savedFilePath,

                      icon:'none'

                    })

                    console.log(res2.savedFilePath)

            },

            fail:err=>{

              console.log(err)

            }

          })      

我实在想不到我还能做些什么了!

3 回复

看起来可能有两种原因:

一种是基础库注入时发生了异常,导致api没有引入进来,导致你第一行给fs赋值的不是预期的文件管理器对象。而你在测试另外两种代码的时候因为触发了重新编译,重新读取注入api基础库,结果就正常了。这种情况下你fs.open应该就恢复正常了(表现出来的就是偶发的错误)。

还有一种比较少见的情况,就是代码看起来没问题,就是运行起来报错。删掉重新手写一遍就好了。我还没摸清具体是因为我粗心写错了哪个字母?还是因为异常空格、换行符、制表符、编码、BOM头还是别的什么原因导致的。。暂时属于比较灵异的事儿。

const fs = wx.getFileSystemManager()

    fs.readFile({

      filePath: wx.env.USER_DATA_PATH+'/'+options.filename,

      //encoding: 'utf8',

      position: 0,

      success(res) {

        console.log(res.data)

      },

      fail(res) {

        console.error(res)

      }

    })

我换了这个,居然又成功把文件内容读了出来。

官方文档的例子不能用,那为何还要给出来坑人?

回到顶部