为什么Windows资源管理器允许创建文件夹太长而无法由Directory.Move移动 - 产生PathTooLongException?

时间:2014-05-01 09:55:53

标签: .net windows filesystems windows-explorer system.io.directory

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

1 个答案:

答案 0 :(得分:-1)

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

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

有关完整参考,请参阅Microsoft文档中的Naming Files, Paths, and Namespaces