Zeta Long Paths

Introduction
This article describes a library that provides several classes and functions to perform basic functions on file paths and folder paths that are longer than the "MAX_PATH
" limit of 260 characters.
Background
All .NET functions I came across that access the file system are limited to file paths and folder paths with less than 260 characters. This includes most (all?) of the classes in the System.IO namespace like e.g. the System.IO.FileInfo class.
Since I was in the need to actually access paths with more than 260 characters, I searched for a solution. Fortunately a solution exists; basically you have to P/Invoke Win32 functions that allow a special syntax to prefix a file and allow it then to be much longer than the 260 characters (about 32,000 characters).
The Library
So I started writing a very thin wrapper for the functions I required to work on long file names.
These resources helped me finding more:
- "Long Paths in .NET" on the BCL Team Blog
- pinvoke.net for finding signatures of Win32 functions
- Using long path syntax with UNC, MSDN
I started by using several functions from the BCL Team blog postings and added the functions they did not cover but which I needed in my project.
Currently there are the following classes:
ZlpFileInfo
- A class similar to System.IO.FileInfo that wraps functions to work on file pathsZlpDirectoryInfo
- A class similar to System.IO.DirectoryInfo that wraps functions to work on folder pathsZlpIOHelper
- A set of static functions to provide similar features as theZlpFileInfo
andZlpDirectoryInfo
class but in a static contextZlpPathHelper
- A set of static functions similar to System.IO.Path that work on paths
Using the Code
The project contains some unit tests to show basic functions.
If you are familiar with the System.IO namespace, you should be able to use the classes of the library.
For example, to get all files in a given folder path, use the following snippet:
var folderPath = new ZetaDirectoryInfo( @"C:\My\Long\Folder\Path" );
foreach ( var filePath in folderPath.GetFiles() )
{
Console.Write( "File {0} has a size of {1}",
filePath.FullName,
filePath.Length );
}
Summary
This article quickly introduced a library to deal with long file names when accessing files and folders.
Please note that the library currently is limited in the number of provided functions.
I will add more functions in the future, just tell me which you require, below in the comments section of this article.
History
- 2011-01-31 - Added functions
MoveFile
andMoveDirectory
. - 2010-03-24 - Added functions to get file owner, creation time, last access time, last write time.
- 2010-02-16 - Maintenance release.
- 2009-11-25 - First release to CodeProject.com.
发表评论
eh7UMm You made some decent points there. I looked on the internet for the issue and found most individuals will go along with with your website.
nN5t6j Thanks for the blog.Really thank you! Keep writing.
W68csb I am so grateful for your article post.Much thanks again. Awesome.
7zzYkF Thank you ever so for you blog article.Really looking forward to read more. Fantastic.