fs.statSync with Buffer "Error: Path must be a string without null bytes"
fs.statSync with Buffer "Error: Path must be a string without null bytes"
我读入了这样的文件缓冲区:
let imageBuffer
try {
imageBuffer = fs.readFileSync('/some/path/to/image.jpg')
} catch (e) {
console.log('error reading in file', e)
}
然后我尝试stat
缓冲区:
let imageStats = fs.statSync(imageBuffer)
我收到以下错误:
Error: Path must be a string without null bytes
但是当我查看文档时它说 statSync
接受 Buffer
:
path: string | Buffer | URL
而且我仔细检查了 Buffer 实际上是一个 Buffer:
console.log(imageBuffer instanceof Buffer) // returns true
还检查了尺码:
console.log(imageBuffer.byteLength) // returns 5928109 which is the correct size
那么我在这里误解了什么?可以只 stat
一个文件路径吗?错误使它听起来像这样。但是文档似乎清楚地表明您也可以提供 Buffer。
错误还是我误解了什么?
我认为 fs.statSync(path)
的文档含糊不清。我相信它是在说它想要 path。路径可以是<string> | <Buffer> | <URL>
,但必须是路径。
所以不要给它整个文件的缓冲区,你给它一个缓冲区,如果变成字符串,就是文件的路径。
换句话说,
fs.statSync("C:/foo.txt");
fs.statSync(Buffer.from("C:/foo.txt"));
fs.statSync(new URL("/foo", "https://www.example.com");
想想也是有道理的。操作系统如何能够为您提供有关文件原始字节的文件系统信息?一旦它是字节,它就失去了文件系统的上下文。如果您读入 2 个相同文件的内容,它们的缓冲区将相同,但其中任何一个的 stat
都会给您不同的结果。您想要 stat
路径,而不是内容。
并没有说缓冲区必须是整个文件内容。
从documentation可以看出第一个参数是path
.
如果您在手册中写道参数必须是 body
、content
或类似的东西,您可能是正确的。
所以这样的代码可以工作。
const imageFile = '/some/path/to/image.jpg';
let imageStats, imageBuffer;
try {
imageStats = fs.statSync(imageFile);
imageBuffer = fs.readFileSync(imageFile);
} catch (e) {
console.log('error reading in file', e)
}
但我确定我们应该要求社区在文档中添加示例。
否则有歧义
我读入了这样的文件缓冲区:
let imageBuffer
try {
imageBuffer = fs.readFileSync('/some/path/to/image.jpg')
} catch (e) {
console.log('error reading in file', e)
}
然后我尝试stat
缓冲区:
let imageStats = fs.statSync(imageBuffer)
我收到以下错误:
Error: Path must be a string without null bytes
但是当我查看文档时它说 statSync
接受 Buffer
:
path: string | Buffer | URL
而且我仔细检查了 Buffer 实际上是一个 Buffer:
console.log(imageBuffer instanceof Buffer) // returns true
还检查了尺码:
console.log(imageBuffer.byteLength) // returns 5928109 which is the correct size
那么我在这里误解了什么?可以只 stat
一个文件路径吗?错误使它听起来像这样。但是文档似乎清楚地表明您也可以提供 Buffer。
错误还是我误解了什么?
我认为 fs.statSync(path)
的文档含糊不清。我相信它是在说它想要 path。路径可以是<string> | <Buffer> | <URL>
,但必须是路径。
所以不要给它整个文件的缓冲区,你给它一个缓冲区,如果变成字符串,就是文件的路径。
换句话说,
fs.statSync("C:/foo.txt");
fs.statSync(Buffer.from("C:/foo.txt"));
fs.statSync(new URL("/foo", "https://www.example.com");
想想也是有道理的。操作系统如何能够为您提供有关文件原始字节的文件系统信息?一旦它是字节,它就失去了文件系统的上下文。如果您读入 2 个相同文件的内容,它们的缓冲区将相同,但其中任何一个的 stat
都会给您不同的结果。您想要 stat
路径,而不是内容。
并没有说缓冲区必须是整个文件内容。
从documentation可以看出第一个参数是path
.
如果您在手册中写道参数必须是 body
、content
或类似的东西,您可能是正确的。
所以这样的代码可以工作。
const imageFile = '/some/path/to/image.jpg';
let imageStats, imageBuffer;
try {
imageStats = fs.statSync(imageFile);
imageBuffer = fs.readFileSync(imageFile);
} catch (e) {
console.log('error reading in file', e)
}
但我确定我们应该要求社区在文档中添加示例。
否则有歧义