收藏
回答

fs.open is not a function 到底是怎么一回事?

 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 个回答

  • 宋佳耀
    宋佳耀
    2021-11-25

    看起来可能有两种原因:

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

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

    2021-11-25
    有用
    回复 2
    • 彬
      2021-11-25
      应该不是你说的原因,因为各种使用姿势我都尝试过了,fs.open就是不行,但fs.readfile就是行。
      2021-11-25
      回复
    • 宋佳耀
      宋佳耀
      2021-11-25回复
      那也有可能是基础库出问题了。今天基础库刚发生过placeholder表现异常的bug,不过已经修复了。
      2021-11-25
      1
      回复
  • Cjiang
    Cjiang
    2021-11-25

    没报错呀

    2021-11-25
    有用
    回复 3
    • 彬
      2021-11-25
      我这个却无情地报错了!删除这个fs.open,我下面那readfile却一点儿问题也没有啊!
      2021-11-25
      回复
    • Cjiang
      Cjiang
      2021-11-25回复
      看下是否是基础库问题?
      2021-11-25
      1
      回复
    • 彬
      2021-11-25
      确实是这个原因,推送够高的版本就没事了。我以为,更新到最新版就不会存在这个问题。看了一下才知道,我的基础库用的原来只是2.14。
      2021-11-25
      回复
  • 彬
    2021-11-25

    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)

          }

        })

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

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

    2021-11-25
    有用
    回复
登录 后发表内容