猿问

如何避免System.IO.PathTooLongException?

我们不断遇到这个问题...

例:

如果我有一个文件要复制到另一个目录或UNC共享中,并且路径长度超过248(如果我没记错的话),则抛出PathTooLongException。有没有解决此问题的方法?

PS:是否有任何注册表设置将此路径设置为更长的字符集?


慕斯王
浏览 895回答 3
3回答

烙印99

BCL团队对此进行了深入讨论,请参阅博客条目。本质上,没有办法在.Net代码中执行此操作并坚持使用BCL。太多的函数依赖于能够规范化路径名(这立即触发期望遵循MAX_PATH的函数的使用)。您可以包装所有支持“ \\?\”语法的win32函数,使用这些函数,您可以实现一套可识别长路径的功能,但这会很麻烦。由于大量工具(包括explorer [1])无法处理长路径名,因此不建议沿这条路线走,除非您对与结果文件系统的所有交互都通过您的库感到满意(或感到满意的工具数量有限)可以像robocopy一样处理它)为了满足您的特定需求,我将调查直接使用robocopy是否足以执行此任务。[1] Vista可以通过在后台进行一些重命名来缓解该问题,但这充其量是脆弱的。
随时随地看视频慕课网APP
我要回答