【问题标题】:nodejs in windows file system path error 4058 ENOENTwindows文件系统路径中的nodejs错误4058 ENOENT
【发布时间】:2016-08-10 08:18:13
【问题描述】:

我在windows 中使用file system with nodejs 来编写进程日志。我有以下代码

var fs = require('fs');
var config = JSON.parse(fs.readFileSync('config.json', 'utf8'));
var statusLogStream = fs.createWriteStream("../logs/load stat"+(new Date())+".log");

结果出错了

    { [Error: ENOENT: no such file or directory, open 'C:\proc\logs\load stat Mon Apr 18 2016 19:09:32 GMT+0530 (India Standard Time).log']
  errno: -4058,
  code: 'ENOENT',
  syscall: 'open',
  path: 'C:\\proc\\logs\\load stat Mon Apr 18 2016 19:09:32 GMT+0530 (India Standard Time).log' }
events.js:141
      throw er; // Unhandled 'error' event
  ^

我尝试使用文件夹手动打开文件C:\\proc\\logs 它不起作用,C:/proc/logs 当我用正斜杠替换双反斜杠时,我可以从资源管理器手动打开文件夹。

如何让它工作

为什么使用double backward slash 而不是forward slash

IMP:上面的代码在linux ubuntu 服务器中运行良好,但在windows 中却不行

【问题讨论】:

  • @Tresdin :坦率地说,我也知道这一点,但是我需要对上述代码进行哪些代码更改才能使其正常工作?

标签: javascript node.js windows file filesystems


【解决方案1】:

问题不在于斜线,而在于日期如何转换为字符串。

我打赌这会奏效:

var statusLogStream = fs.createWriteStream("../logs/load stat.log");

更新 Windows 抱怨日期字符串表示中的两个冒号 (Mon Apr 18 2016 19**:**09**:**32 GMT+0530 (India Standard Time))

这可能是一个不错的选择:

var myDate = new Date().toJSON().replace(new RegExp(':', 'g'),'.');
// myDate is now "2016-04-18T15.19.21.174Z"
var statusLogStream = fs.createWriteStream("../logs/load stat"+(myDate)+".log");

【讨论】:

  • 你是怎么知道的?我不太清楚。
  • 我首先尝试了一个简单的测试./loadstat.log 来检查斜线问题。然后我一次添加一块,直到出现错误。特别是 windows 抱怨文件名中存在两个:。仍在调查为什么...
  • 在 Windows 平台上使用 Nodes 时,我发现文件夹名称带有特殊字符,例如 '*' 并且也以 '.' 结尾正在引起问题...因此,我们总是在 IO 操作中使用它们之前“规范化”文件名和文件夹名称...
猜你喜欢
  • 2018-12-25
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 2019-09-24
  • 1970-01-01
相关资源
最近更新 更多