努力开发小程序ing 2024-02-29 16:48 采纳率: 9.1%
浏览 33
已结题

如何将小程序中用户在临时目录中创建的文本文件存储到本地

请教一下各位,如何将小程序中用户创建在临时路径中的文本文件const tempFilePath = ${wx.env.USER_DATA_PATH}/tempFile.txt存储到本地手机,目前实现了在小程序中临时目录中创建txt文件、写入内容并且读取成功能够打印出来,下图一是成功创建文件夹并且写入内容能够成功打印出来,表示创建成功了,但是根据网上的资料用wx.saveFile 将其保存到本地,这一步出错了,求指点

img

img

img


```javascript
Page({  
  data: {  
    // 页面初始数据  
    inputText: '' // 用于存储用户输入的文本
  },  
  // 当用户输入文本时更新数据  
  onInput: function(e) {  
    this.setData({  
      inputText: e.detail.value  
    });  
  },  

    // 保存文件到用户数据目录  
    createFile: function() {  
      const { inputText } = this.data;  
      if (!inputText) {  
        wx.showToast({  
          title: '请输入文本内容',  
          icon: 'none'  
        });  
        return;  
      }  
  // 创建并写入文件的函数  
  
    const fs = wx.getFileSystemManager();  
    const filePath = wx.env.USER_DATA_PATH + '/myqweq.txt'; // 用户数据目录下的文件路径  
    // 创建一个临时文件的路径  
    // const tempFilePath = `${wx.env.USER_DATA_PATH}/myTempFile.txt`;  
    // const data = '这是我2024年2月29日新建的文本文件'; // 要写入文件的数据  
  
    // 写入文件的操作  
    fs.writeFile({  
      filePath: filePath,  
      data: inputText,  
      encoding: 'utf8',  
      success(res) {  
        wx.showToast({  
          title: '文件创建成功',  
          icon: 'success',  
          duration: 2000  
        }); 
        console.log('文件写入成功', res); 
         // 现在,我们将该文件从临时目录移动到用户数据目录  
          fs.saveFile({  
            tempFilePath: filePath,  
            success(res) {  
              console.log('文件保存成功', res);  
              // 文件已经成功保存到用户数据目录  
              const savedFilePath = res.savedFilePath;  
              // 这里可以处理文件保存后的逻辑,例如通知用户文件已保存  
            },  
            fail(err) {  
              console.error('保存文件失败', err);  
              // 处理保存文件失败的情况  
            }  
          });   
      },  
      fail(err) {  
        wx.showToast({  
          title: '文件创建失败',  
          icon: 'none',  
          duration: 2000  
        });  
        console.error('Failed to create file', err);  
      }  
    });  
    
  
    }
});
```xml
<view class="container">  
  <input class="input" type="text" placeholder="请输入文本内容" bindinput="onInput" />  
  <button bindtap="createFile">创建并写入文件</button>  
</view>


  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-02-29 16:50
    关注

    引自免费微信小程序:皆我百晓生

    在微信小程序中,你已经成功创建了一个文本文件并将其写入到用户数据目录。根据你的代码片段,wx.saveFile 方法在这里被误解和误用了。实际上,saveFile 方法是用来将临时文件(如从网络下载的文件)保存到本地指定的路径,而不是用于移动或重命名已存在于用户数据目录下的文件。

    由于你已经在用户数据目录下直接创建了文件,因此不需要再次调用 wx.saveFile。在你的代码中,你尝试将刚创建的文件作为临时文件路径传递给 saveFile,这是不正确的,因为这个文件并非临时文件,它已经存储在用户数据目录中了。

    以下是修正后的代码,只需删除不必要的 fs.saveFile 部分:

    Page({
      data: {
        // 页面初始数据
        inputText: '' // 用于存储用户输入的文本
      },
      // 当用户输入文本时更新数据
      onInput: function(e) {
        this.setData({
          inputText: e.detail.value
        });
      },
    
      // 保存文件到用户数据目录
      createFile: function() {
        const { inputText } = this.data;
        if (!inputText) {
          wx.showToast({
            title: '请输入文本内容',
            icon: 'none'
          });
          return;
        }
    
        const fs = wx.getFileSystemManager();
        const filePath = `${wx.env.USER_DATA_PATH}/myqweq.txt`; // 用户数据目录下的文件路径
    
        // 写入文件的操作
        fs.writeFile({
          filePath,
          data: inputText,
          encoding: 'utf8',
          success(res) {
            wx.showToast({
              title: '文件创建成功',
              icon: 'success',
              duration: 2000
            });
            console.log('文件写入成功', res);
            // 文件已成功写入到用户数据目录,无需再使用 wx.saveFile
            // 这里可以处理文件写入后的逻辑,例如通知用户文件已保存
          },
          fail(err) {
            wx.showToast({
              title: '文件创建失败',
              icon: 'none',
              duration: 2000
            });
            console.error('Failed to create file', err);
          }
        });
      }
    });
    

    上述修正过的代码中,当用户点击“创建并写入文件”按钮后,会将输入框中的文本写入到指定的用户数据目录下的文件,并在成功时显示提示信息。这样就完成了在小程序中将用户输入的内容持久化存储到本地用户数据目录的目的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月9日
  • 已采纳回答 3月1日
  • 创建了问题 2月29日