windows文件系统中的nodejs路径错误4058 ENOENT

nodejs in windows file system path error 4058 ENOENT

本文关键字:错误 4058 ENOENT 路径 nodejs 文件系统 windows      更新时间:2023-09-26

我使用windows中带有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服务器上运行不好

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

我打赌这会起作用:

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");

我遇到了同样的问题。

在我的项目中,当我运行一个express应用程序时,我注意到当前的工作目录是项目的根目录(当我试图读取位于脚本目录中的文件时)。自process.cwd() !== __dirname以来,它无法运行该文件。

您可以检查它,并在试图读取json文件的脚本中控制台日志process.cwd()

我刚把路径改成:

const fs = require('fs');
fs.readFileSync(`${__dirname}''FILENAME`);