当文件路径包含带有时间戳的文件夹时,fs.writeFile不起作用

时间:2019-06-25 10:47:58

标签: node.js filesystems

我正在尝试将数据写入文件夹名称为带有时间戳的文件夹内的文件中。

 fs.writeFileSync(`.files/${process.env.TIMESTAMP}/data.txt`, "Welcome", 
      "utf8", function (err) {
           if (err) {
             return console.log(err);
           }
      });

和我提到的时间戳记

`${new Date().toLocaleDateString()}_${new Date().toLocaleTimeString()}`;

没有显示错误,但是没有被写入。如果我删除并给出以下内容:它的作品

fs.writeFileSync('.files/data.txt', "Welcome", 
      "utf8", function (err) {
           if (err) {
             return console.log(err);
           }
      });

请帮助我了解如何使用时间戳记。

2 个答案:

答案 0 :(得分:0)

在第一种情况下,原因是您试图写入一个根本不存在的文件夹。名称为$ {process.env.TIMESTAMP}的文件中没有文件夹。

首先根据您的要求创建一个名称为目录的目录,然后尝试写入该文件夹中的文件

做这样的事情

var dir = `.files/${process.env.TIMESTAMP}`;

if (!fs.existsSync(dir)){
    fs.mkdirSync(dir);
}

fs.writeFileSync(`.files/` + dir + `/data.txt`, "Welcome", 
      "utf8", function (err) {
           if (err) {
             return console.log(err);
           }
      });

答案 1 :(得分:0)

您的代码中有几个错误:

1)writeFileSync(file, data[, options])没有将回调作为第三个参数。仅此方法writeFile(file, data[, options], callback)的异步版本存在回调参数。

在这种情况下,如果出现错误,您应该得到例外:

fs.writeFileSync(`.files/${process.env.TIMESTAMP}/data.txt`, "Welcome", "utf8");

2)此表达式可能产生无效的文件夹名称:

`${new Date().toLocaleDateString()}_${new Date().toLocaleTimeString()}`

在我的浏览器中,它产生了:

"6/25/2019_2:01:44 PM"

但是在UNIX系统中,rules for folder and files names如下:

  
      
  1. 简而言之,文件名可以包含/以外的任何字符(根目录),该字符保留为路径名中文件和目录之间的分隔符。您不能使用空字符。
  2.   

您应该设置更安全的目录名称。使用这种方法:

`${d.getFullYear()}_${d.getMonth()}_${d.getDate()}__${d.getHours()}_${d.getMinutes()}`

_-文件夹和文件名的字符。

3)您需要先使用mkdirSync()创建目录,然后再在其中创建文件