65.9K
CodeProject 正在变化。 阅读更多。
Home

在 .NET 中处理长路径

starIconstarIconstarIconstarIconstarIcon

5.00/5 (4投票s)

2011 年 9 月 15 日

CPOL

2分钟阅读

viewsIcon

68132

downloadIcon

3168

一个类,用于轻松处理(长度为 32K)的长路径,使用 .NET。

引言

这个类允许轻松访问 Windows 中的长路径名称。 如果您曾经遇到由于尝试访问的路径过长而导致的异常,这将非常有用。 您的应用程序将不再受大约 250 个字符的长度限制。

背景

我开始在业余时间构建一个项目。 我就不赘述了,但我的计划被最大长度限制所阻止。 幸运的是,我找到了文章系列 .NET 中的长路径,第 1 部分(共 3 部分)[Kim Hamilton]。 我使用了该文章系列中的想法,从而找到了解决问题的简单方法。

Using the Code

我尝试尽可能地模拟 FileDirectory 类在 System.IO 命名空间中的一些功能和方法名称。 命名空间是 System.IO.LongPath。 这两个类是 FileDirectory

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 - 首次提交。
© . All rights reserved.