在.NET开发中,经常会遇到路径过长导致的问题。传统的路径长度限制为250~字符,这在处理大型文件系统时常常成为瓶颈。本文将介绍一种解决方案,它允许开发者在.NET环境中使用更长的路径。
在业余时间,着手构建一个项目。然而,由于路径长度的限制,计划被迫中断。幸运的是,找到了一个系列文章《.NET中的长路径》,作者为Kim Hamilton。从这个系列中获得了灵感,并找到了解决问题的方法。
尝试模仿.NET框架中System.IO命名空间下的File和Directory类的函数和方法名称。新的命名空间是System.IO.LongPath,包含两个类:File和Directory。
File类包含以下公共方法:
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类包含以下公共方法:
void Create(string directory)
:创建具有给定名称的目录。void Delete(string drectory)
:删除指定的目录及其所有子目录和文件。bool Exists(string drectory)
:检查指定的目录是否存在。string[] GetFileSystemEntries(string drectory)
:获取由directory参数提供的目录的文件系统条目。这不是一个递归函数,只返回提供的目录的文件系统条目。这是第一次深入探索Windows API。例如,复制了以下属性:
C# [return: MarshalAs(UnmanagedType.Bool)]
从Kim Hamilton的文章中复制了这个属性,并用在了导入的Windows API的额外bool函数上。不知道是否应该这样做。对于这一点,很感兴趣听到反馈。
必须使用长名称路径,格式为\\?\c:\long\path
,对于网络路径,格式为\\?\UNC\server\long\path
。不能使用相对路径。所有指定的路径必须是绝对的。不支持".."和"."。