我可以在Windows资源管理器中手动创建一个文件夹,完整路径长度恰好是247个字符(不包括尾部斜杠)。据我所知,248是最大文件夹名称路径限制,包括尾部斜杠。
然后我尝试使用Directory.Move
方法将此文件夹重命名为更短的路径:
string folder247CharsLong = @"C:\first level folder path - will form 247 chars\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\ccccccccccccccccccccccccccccccccccccc";
string folder215CharsLong = @"C:\first level folder path - will form 247 chars\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\SHORT";
Directory.Move(folder247CharsLong, folder215CharsLong);
抛出PathTooLongException
- 说"完全限定的文件名必须少于260个字符,目录名必须少于248个字符"。
我认为这是因为Directory.Move附加了一个试验性斜杠,然后检查(路径+" \")。长度< 248。
具有相同路径的Directory.Delete方法不会抛出。
我认为问题在于Windows资源管理器允许创建此类文件夹,任何人都可以确认这是否有错误的Windows资源管理器行为或Directory.Move中的错误?
答案 0 :(得分:-1)
它取决于用于引用文件/文件夹的API函数的版本以及它们使用的命名空间。
在Windows API中,路径的最大长度为260,但API函数的unicode版本处理的扩展长度为32767个字符。
有关完整参考,请参阅Microsoft文档中的Naming Files, Paths, and Namespaces。