Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Delete Files that Break Through Maximum Path Length Limitation

0.00/5 (No votes)
30 Oct 2014 1  
Explains how to delete a local file whose path exceeds the system-defined maximum length

Introduction

This tip shows how to delete a local file whose path exceeds the system-defined maximum length.

Background

Normally, we can use File.Delete to delete a local file given the file path. However, when the file path exceed?s the system-defined maximum length (say 260 characters on Windows, as shown in the Fig. 1), File.Delete will throw System.IO.PathTooLongException.

Figure 1. Example file name beyond the limit

What is Maximum Path Length Limitation?

In the Windows API, the maximum length for a path is MAX_PATH, which is defined as 260 characters. A local path is structured in the following order: drive letter, colon, backslash, name components separated by backslashes, and a terminating null character. For example, the maximum path on drive D is "D:\some 256-character path string<NUL>" where "<NUL>" represents the invisible terminating null character for the current system codepage. See here for more details.

How Comes a File Breaks through the Maximum Path Length Limitation?

The Windows API has many functions that also have Unicode versions to permit an extended-length path for a maximum total path length of 32,767 characters. This type of path is composed of components separated by backslashes, each up to the value returned in the lpMaximumComponentLength parameter of the GetVolumeInformation function (this value is commonly 255 characters).

Solution

Instead of calling File.Delete, you can use 'del [file_name]' in Windows DOS command prompt to compulsorily delete files.

Using the Code (in C#)

static bool DeleteFile(string fileName)
{
    try
    {
        Process cmd = new Process();

        cmd.StartInfo.FileName = "del";
        cmd.StartInfo.Arguments = fileName;
        cmd.StartInfo.UseShellExecute = false;
        cmd.StartInfo.RedirectStandardInput = true;
        cmd.StartInfo.RedirectStandardOutput = true;
        cmd.StartInfo.CreateNoWindow = true;
        cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

        cmd.Start();
        cmd.WaitForExit();
        cmd.Close();
    }
    catch (Exception e)
    {
        // handle the potential exception here
    }
    return !File.Exists(fileName);
} 

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here