Question

For testing purpose, I would like to create on disk a directory which exceeds the Windows MAX_PATH limit. How can I do that?

(I tried Powershell, cmd, windows explorer => it's blocked.)

Edited: The use of ZlpIOHelper from ZetaLongPaths library allows to do that whereas the standard Directory class throws the dreaded exception:

        static void Main(string[] args)
    {
        var path = @"d:\temp\";
        var dirName = "LooooooooooooooooooooooooooooooooooooooooooooongSubDirectory";
        while (path.Length <= 280)
        {
            path = Path.Combine(path, dirName);
            ZlpIOHelper.CreateDirectory(path); //Directory.CreateDirectory(path);
        }
        Console.WriteLine(path);
        Console.ReadLine();
    }
Was it helpful?

Solution

In WIN32 you need to use the special "\\?\" prefix to allow for longer file names.

See: http://msdn.microsoft.com/en-us/library/aa365247.aspx

For file I/O, the "\\?\" prefix to a path string tells the Windows APIs to disable all string parsing and to send the string that follows it straight to the file system. For example, if the file system supports large paths and file names, you can exceed the MAX_PATH limits that are otherwise enforced by the Windows APIs. For more information about the normal maximum path limitation, see the previous section Maximum Path Length Limitation.

As you are using C# then try this library which will save you having to do all the PInvokes to the WIN32 file API and adding the prefix to the paths.

OTHER TIPS

The easiest solution is to create a directory c:\A\averylongnamethatgoesonandonandon..., and then rename C:\A to something much longer. Windows does not check every child of A to see if the name of that child would exceed MAX_PATH.

How about something like this:

var path = "C:\\";
while (path.Length <= 260)
{
    path = Path.Combine(path, "Another Sub Directory");
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top