我可以在 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 附加了一个试验斜杠,然后检查 (path +"\").Length < 248。
具有相同路径的 Directory.Delete 方法不会抛出。
我认为问题是 Windows 资源管理器允许创建这样的文件夹,任何人都可以确认这是错误的 Windows 资源管理器行为还是 Directory.Move 中的错误?