gpt4 book ai didi

javascript - 为什么 fs.mkdir();使用很长的目录名会产生 ENOENT 错误吗?

转载 作者:太空宇宙 更新时间:2023-11-04 03:08:05 25 4
gpt4 key购买 nike

我使用的是 Windows 7 和 Node.js。

示例:

fs.mkdir(__dirname + '/users/' + 'asdlfjlasdfjlsdajflasdkjflksadjflasdkjflasdkjflsadkjflaskdjflasdkjfaslkdjfaslkdjfasldkjfsaldkjfaslkdjflasdkjflaskdfjalskdjflsdakjflasd%3Bkjflaksdjfklasdfja%3Bsdlkfjasldkfjlsadkfjklsadjfasldkfjlsadkjflasdkjflasdkjfasdlfjlasdfjlsdajflasdkjflksadjflasdkjflasdkjflsadkjflaskdjflasdkjfaslkdjfaslkdjfasldkjfsaldkjfaslkdjflasdkjflaskdfjalskdjflsdakjflasd%3Bkjflaksdjfklasdfja%3Bsdlkfjasldkfjlsadkfjklsadjfasldkfjlsadkjflasdkjflasdkjfasdlfjlasdfjlsdajflasdkjflksadjflasdkjflasdkjflsadkjflaskdjflasdkjfaslkdjfaslkdjfasldkjfsaldkjfaslkdjflasdkjflaskdfjalskdjflsdakjflasd%3Bkjflaksdjfklasdfja%3Bsdlkfjasldkfjlsadkfjklsadjfasldkfjlsadkjflasdkjflasdkjfasdlfjlasdfjlsdajflasdkjflksadjflasdkjflasdkjflsadkjflaskdjflasdkjfaslkdjfaslkdjfasldkjfsaldkjfaslkdjflasdkjflaskdfjalskdjflsdakjflasd%3Bkjflaksdjfklasdfja%3Bsdlkfjasldkfjlsadkfjklsadjfasldkfjlsadkjflasdkjflasdkjf', function(err) {
if (err && err.code == 'EEXIST') {
// do nothing
} else if (err) throw(err)
});

我有一种预感,这与 Windows 限制目录路径的大小有关。我读过一些关于实际限制的不同说法,但似乎相对较小。

但是说真的,为什么错误代码是 ENOENT?有没有办法确保在这种情况下错误是因为目录名/路径太长。 ENOENT 是否仅由 mkdir() 返回;如果目录太长怎么办?我只是觉得应该有比 ENOENT 更好的代码,因为根据我(非常有限的)经验,这意味着该目录不存在,而不是它不能存在。

附注我以某种方式设法使用 mkdir() 在我的计算机上创建了一个相当长的目录名称(不像上面的那么长)。当我尝试通过右键单击删除文件时,Windows 资源管理器总是崩溃,而当我使用“删除”键或将文件拖到回收站时,什么也没有发生。另外,命令行中的“del”表示该名称太长。有什么解决方案可以将此文件夹从我的计算机上删除吗?

(“users”目录确实存在。)

最佳答案

mkdir是一个 POSIX 函数,事实上它的规范表明如果提供的名称太长,它应该返回 ENAMETOOLONG

不过,Windows 不是 POSIX 系统。它确实为常见的 POSIX 函数提供了许多包装器 - 例如有一个 mkdir MS 表示已弃用该函数,以支持符合 ISO C++ 的 _mkdir功能。我的猜测是前者实际上只是调用后者。

MS 实现 _mkdir 的文档仅指定了两种可能的错误代码:EEXIST 和 ENOENT。

我的猜测是windows中mkdir的实现调用了底层的Win32 CreateDirectory函数,然后将该函数中所有可能的错误代码映射到它们选择从 _mkdir 返回的两个错误代码之一。

Node.js 在这方面并没有真正发挥作用。它的 fs 包本身就是 POSIX 函数的包装器。它返回从 Win32 mkdir 包装器获取的错误代码。

关于javascript - 为什么 fs.mkdir();使用很长的目录名会产生 ENOENT 错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33325769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com