I'm writing a C# program that uses System.IO
methods to work with files and directories. Some of these methods include Directory.GetDirectories
, Directory.GetFiles
, and Path.GetDirectoryName
which can all throw the PathTooLongException
exception if the path is too long. My first question is does the Microsoft .NET Framework enforce the maximum length of a path, the same way that a call to a Windows API in C++ does? Does a path (in a string
) in C# that exceeds MAX_PATH
cause PathTooLongException
to be thrown?
Should I use this?
string getFolderName(string path)
{
if (string.IsNullOrWhiteSpace(path))
return string.Empty;
if (path.Length > 260)
{
System.Diagnostics.Debug.WriteLine("Path is too long.");
return string.Empty;
}
string folderName = System.IO.Path.GetDirectoryName(path);
return folderName;
}
Or this?
string getFolderName(string path)
{
if (string.IsNullOrWhiteSpace(path))
return string.Empty;
string folderName = string.Empty;
try {
folderName = System.IO.Path.GetDirectoryName(path);
}
catch (System.IO.PathTooLongException)
{
System.Diagnostics.Debug.WriteLine("Path is too long.");
}
return folderName;
}
Better is a judgment call.
Catching an exception is a much slower operation than testing for the condition and avoiding the exception entirely. However, unless you are going to encounter a large number of exceptions, the performance difference is simply not important.
It is hard too imagine a case where you would get large numbers of path too long errors, unless you are trying to do something where are copying or moving tree into a directory node that is already deep. In which case, you are probably better off to test everthing up front so you don't create a large slow operation that will fail in the middle.
However, a hard-coded 260 is a bad idea anyway as this previous answer shows.
There is no built-in windows function that gives the real answer for a given system, but you could simply determine the answer by trial and error (maybe a binary search) on the user system before starting your operations.
However, if you read the article I referenced, you will see that you can easily create longer paths in a program than will work well in windows. Windows explorer has problems once you reach 255 characters, so long story short, I would recommend a limit of 255 at most if you have any choice in the matter.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With