- FileSystemManager模块write接口position参数有bug
data的类型为string时,设定position的值为非Number类型,如string类型的'12'、‘ab’、boolean类型的true和false、object类型{'name':'test'}时,都会从头开始写,然后把原有数据覆盖掉,覆盖的长度为写入数据的长度,之后的内容不变。比如原有的数据为0123456789,写入data的内容为abcde,position设为true,则结果为abced6789。同时,data的类型为ArrayBuffer时,写入文件后,使用readFileSync读取文件的输出是乱码的,不能正确直观地呈现数据。测试代码如下: write() { const fs = wx.getFileSystemManager() const ab = new ArrayBuffer(1024) const abSmall = new ArrayBuffer(10) let dataView = new DataView(ab) const value = 123456789 dataView.setInt32(0, value) console.log(dataView.getInt32(0)) // 打开文件 const fd=fs.openSync({filePath:`${wx.env.USER_DATA_PATH}/hello.txt`,flag:'r+'}) // 写入文件 fs.write({ fd:fd, data:'0123456789abcdef', encoding:'utf8', /** position 指定文件开头的偏移量,即数据要被写入的位置 * 打开模式flag为'a+'时,position取任意值都视为无效,都会指向文件末尾,但'r+'模式下有效 * 【 1 合法 】 10 从指定位置开始写,然后把原有数据覆盖掉,覆盖的长度为写入数据的长度,之后的内容不变 * 1.1 num {bytesWritten: 16, errMsg: "write:ok"} * 【 2 非法 】 * 2.1 '20' 会从头开始写,然后把原有数据覆盖掉,覆盖的长度为写入数据的长度,之后的内容不变 * 2.2 '' 会从头开始写,然后把原有数据覆盖掉,覆盖的长度为写入数据的长度,之后的内容不变 * 2.3 'ab' 会从头开始写,然后把原有数据覆盖掉,覆盖的长度为写入数据的长度,之后的内容不变 * 2.4 true 会从头开始写,然后把原有数据覆盖掉,覆盖的长度为写入数据的长度,之后的内容不变 * 2.5 false 会从头开始写,然后把原有数据覆盖掉,覆盖的长度为写入数据的长度,之后的内容不变 * 2.6 null 会从头开始写,然后把原有数据覆盖掉,覆盖的长度为写入数据的长度,之后的内容不变 * 2.7 object 会从头开始写,然后把原有数据覆盖掉,覆盖的长度为写入数据的长度,之后的内容不变 * 2.8 undefined 会从头开始写,然后把原有数据覆盖掉,覆盖的长度为写入数据的长度,之后的内容不变 */ position:true, success(res) { console.log(res) console.log('The write bytes: '+res.bytesWritten) }, fail(err){ console.error(err) } }) // 读取文件内容 const readRes = fs.readFileSync(`${wx.env.USER_DATA_PATH}/hello.txt`, 'utf8') console.log('The result of read file: ' + readRes) },
2023-09-07 - 文件管理系统rmdir接口传入一个文件路径时既不走success回调也不走fail回调
接口功能为删除目录,但开发者想测试传入一个存在的文件路径的反馈情况。然后接口既不走success回调也不走fail回调。同时也编写了ifacc()方法,在其中使用了open接口,并设置打开模式flag为'r',来校验路径是否被删除 rmdir() { console.log('rmdir start') const fs = wx.getFileSystemManager() fs.rmdir({ dirPath:`${wx.env.USER_DATA_PATH}/hello.txt`, // dirPath: `${wx.env.USER_DATA_PATH}/saveFiles/saveFile/saveFile1`, recursive: false, success(res) { console.log(res) console.debug('rmdir succeed') }, fail(err) { console.debug(err) console.debug('rmdir fail') } }) console.log('rmdir finished') }, ifacc() { const fs = wx.getFileSystemManager() let res=fs.open({ filePath: `${wx.env.USER_DATA_PATH}/hello.txt`, flag: 'r', success(res) { console.log('走success回调,表示路径未被删除仍存在,输出fd:'+res.fd) }, fail(err){ console.log('走fail回调,表示路径不存在已被删除,输出错误信息:'+err) } }) console.log('打开文件获取到的fd: '+res) },
2023-08-17 - 报一个bug
该接口的参数position,说明文档中声明“从文件指定位置开始读,如果不指定,则从文件头开始读。读取的范围应该是左闭右开区间 [position, position+length)。有效范围:[0, fileLength - 1]。单位:byte”,但当传一个大于fileLength的值时,接口能够跑成功,返回的是长度为length(另一个参数)的空字符串。 同样,对参数length,文档中声明“指定文件的长度,如果不指定,则读到文件末尾。有效范围:[1, fileLength]。单位:byte”,但当传一个大于fileLength的值时,接口能够跑成功,返回的内容为长度为length的字符串,串的前部是文本内容,串的后部是空字符串。 请问该特性是合法的还是bug
2023-08-09 - fstat接口中提到的POSIX stat.xxx是代表什么,去哪找它的值?
微信小程序API接口中的FileSystemManager分类,有一个叫fstat的接口,提到的POSIX stat.xxx是代表什么,去哪找它的值?
2023-07-27 - API中的getFileInfo,其传入的参数只能是本地路径吗?只能在真机上测试吗?
getFileInfo在微信开发者工具中采用模拟测试的时候,传入的是前缀为${wx.env.USER_DATA_PATH}的路径,总是会进入fail(res)中 getFileInfo(){ const fs = wx.getFileSystemManager() fs.getFileInfo({ // filePath所在路径已创建 filePath: '${wx.env.USER_DATA_PATH}'+'/saveFiles/saveFile1/saveFile2', success(res){ console.log('getFileInfo succeed') console.log('文件的大小为' + res.size) }, fail(res){ console.log('getFileInfo fail') } }) },
2023-07-26 - ftruncate、ftruncateSync传入的fd的规范是什么?
在使用微信开发者工具调试ftruncate、ftruncateSync接口时,一直提示 operation not permitted, ftruncate。使用的是官方的示例代码,打开文件获取到fd,但console.log(fd)输出的值一直处于变化之中。请问如何正确获取到符合ftruncate要求的fd?
2023-07-26