在 .NET 中处理长路径





5.00/5 (4投票s)
一个类,用于轻松处理(长度为 32K)的长路径,使用 .NET。
引言
这个类允许轻松访问 Windows 中的长路径名称。 如果您曾经遇到由于尝试访问的路径过长而导致的异常,这将非常有用。 您的应用程序将不再受大约 250 个字符的长度限制。
背景
我开始在业余时间构建一个项目。 我就不赘述了,但我的计划被最大长度限制所阻止。 幸运的是,我找到了文章系列 .NET 中的长路径,第 1 部分(共 3 部分)[Kim Hamilton]。 我使用了该文章系列中的想法,从而找到了解决问题的简单方法。
Using the Code
我尝试尽可能地模拟 File
和 Directory
类在 System.IO
命名空间中的一些功能和方法名称。 命名空间是 System.IO.LongPath
。 这两个类是 File
和 Directory
。
File
类包含以下 public
方法
void Delete(string file)
FileStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share)
void Copy(string sourceFile, string destinationFile, bool failIfDestinationExists)
void Move(string sourceFile, string destinationFile, bool failIfDestinationExists)
删除指定的文件。
打开文件流到路径参数中指定的文件。
将文件从一个位置复制到另一个位置。
将文件从一个位置移动到另一个位置。
Directory
类包含以下 public
方法
void Create(string directory)
void Delete(string drectory)
bool Exists(string drectory)
string[] GetFileSystemEntries(string drectory)
创建具有给定名称的目录。
删除指定的目录及其所有子目录和文件。
检查指定的目录是否存在。
获取目录参数提供的目录的文件系统条目。 这不是一个递归函数,仅返回提供的目录的文件系统条目。
关注点
这是我深入 Windows API 的最大尝试。 我不确切知道自己在做什么。 例如,我复制了属性
[return: MarshalAs(UnmanagedType.Bool)]
我从 Kim Hamilton 的文章中复制了这个,并将其用于我从 Windows API 导入的附加 bool
函数。 我不知道我是否应该这样做。 对此的反馈会很有趣。
您必须使用 \\?\c:\long\path 指定所有路径作为长名称路径,并将网络路径指定为 \\?\UNC\server\long\path。
您不能使用相对路径。 必须指定所有绝对路径。 不支持“..” 和“.”。
我期待任何反馈。 请与我分享您的想法。
历史
- 2011-09-14 - 首次提交。