Javascript 为什么fs.mkdir();产生一个eNONT错误,目录名很长?

Javascript 为什么fs.mkdir();产生一个eNONT错误,目录名很长?,javascript,node.js,windows,directory,Javascript,Node.js,Windows,Directory,我正在使用Windows7和Node.js 例如: fs.mkdir(__dirname + '/users/' + 'asdlfjlasdfjlsdajflasdkjflksadjflasdkjflasdkjflsadkjflaskdjflasdkjfaslkdjfaslkdjfasldkjfsaldkjfaslkdjflasdkjflaskdfjalskdjflsdakjflasd%3Bkjflaksdjfklasdfja%3Bsdlkfjasldkfjlsadkfjklsadjfasldk

我正在使用Windows7和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限制目录路径的大小有关。我读过一些关于实际限制的不同描述,但似乎它相对较小

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

另外,我用mkdir()在我的计算机上创建了一个相当长的目录名(没有上面的那个长)。当我试图通过右键单击删除文件时,Windows资源管理器总是会崩溃,当我使用“删除”键或将文件拖到回收站时,不会发生任何情况。另外,命令行中的“del”表示名称太长。有什么办法可以把这个文件夹从我的电脑上取下来吗

(users目录确实存在。)

是一个POSIX函数,而且它的规范规定,如果提供的名称太长,它应该返回
ENAMETOOLONG

不过,Windows不是POSIX系统。它确实为公共POSIX函数提供了许多包装器,例如,MS表示的函数被禁止使用符合ISO C++的函数。我的猜测是前者实际上只是调用后者

_mkdir的MS实现文档只指定了两个可能的错误代码:EEXIST和enoint

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

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

是一个POSIX函数,而且它的规范规定,如果提供的名称太长,它应该返回
enametolong

不过,Windows不是POSIX系统。它确实为公共POSIX函数提供了许多包装器,例如,MS表示的函数被禁止使用符合ISO C++的函数。我的猜测是前者实际上只是调用后者

_mkdir的MS实现文档只指定了两个可能的错误代码:EEXIST和enoint

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


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

可能是260个字符的Windows限制。可能是260个字符的Windows限制。是的。基本Win32错误代码为
错误路径\u未找到
,这意味着目录不存在或路径无效。Win32不区分这两种情况,因此也不区分_mkdir.Yes。基本Win32错误代码为
错误路径\u未找到
,这意味着目录不存在或路径无效。Win32无法区分这两种情况,因此_mkdir也无法区分。