如何在Windows下使用node.js向NUL设备写入数据?

12
这个问题困扰了我好几天。我知道标准流重定向到NUL设备,但这不是这种情况。node.js在其fs本地/ libuv绑定下使用CreateFileW。
不幸的是,使用以下方法:
require('fs').writeFileSync('NUL', 'foo')

在当前工作目录中创建一个具有3个字节的NUL文件。

我尝试写入\Device\Null,但由于我基本上是*nix爱好者,在那里一切都是文件,我未能找到实际有效的\Device\Null路径。例如 \\.\Device\Null 会抛出ENOENT错误。

有什么想法可以使Windows下的此操作起作用吗?这里似乎与此相关,但我无法从lib/fs.js追踪整个流程到uv/src/win/fs.c,以检查路径参数是否受到某种相对于绝对路径解析的影响。


1
不确定是否有效,但尝试使用“NUL:”。 - Harry Johnston
在发布问题之前已经尝试过了,但是不起作用。会抛出某种访问被拒绝的错误。目前没有Windows机器提供具体信息。 - SaltwaterC
2个回答

7

NUL设备的有效路径是"\\\\.\\NUL",而不是NUL。因此使用方式为:fs.writeFileSync("\\\\.\\NUL", "foo")。此问题已在GitHub上针对Node.js提出:https://github.com/nodejs/node-v0.x-archive/issues/9271

由于NUL是一个设备而不是文件,因此必须通过设备命名空间进行访问 - 这需要在开头放置\\.\(其他斜杠用于转义)- 请参见https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247.aspx#Win32_Device_Namespaces

还有一个简单的dev-null库可用于NPM与流一起使用:https://www.npmjs.com/package/dev-null(不能与.writeFile一起使用)。


3

不是传递一个包装器方法来检测操作系统并相应地处理NUL设备,而是我简单地修补了库,如果将null作为参数传递,则不会附加任何数据/结束事件侦听器。我想这是更容易的做法,而不是让操作系统丢弃数据。 - SaltwaterC
很高兴你找到了一个可行的解决方案。你能和社区分享你的代码吗? :) - Eugene Hauptmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接