1

我可以在 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 中的错误?

4

1 回答 1

-1

这取决于用于引用文件/文件夹的 API 函数的版本以及它们使用的命名空间。

在 Windows API 中,路径的最大长度为 260,但 API 函数的 Unicode 版本处理的扩展长度为 32767 个字符。

有关完整参考,请参阅Microsoft 文档中的命名文件、路径和命名空间。

于 2014-05-01T10:16:08.610 回答