Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error: File Path is Too Long

Tags:

c#

i am trying to use the various file functions in C# like File.GetLastWriteTime, copy command on the file placed at the path greater than maximum allowed path on windows 7 i.e 260. Its giving me an error on long path name. On MSDN support i they have asked to use the \\?\ before the path. I did the same but still i got the same error, it seems it doesn't make any change. Below is my code. Please let me know if i am using it correct or i need to add any thing:
These all lib i am using as the code is having other things also:

the below is the respective code:

filesToBeCopied = Directory.GetFiles(path,"*",SearchOption.AllDirectories);
for (int j = 0; j < filesToBeCopied.Length; j++)
{
    try
    {
        String filepath = @"\\?\" + filesToBeCopied[j];
        File.GetLastWriteTime(filepath);
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error Inside the single file iteration for the path:" +
            filesToBeCopied[j] + " . The exception is :" + ex.Message);
    }
}

where as path is the path to the folder at windows machine starting with drive letter. for ex.: d:\abc\bcd\cd\cdc\dc\..........

like image 520
nishant jain Avatar asked Aug 30 '12 19:08

nishant jain


2 Answers

Here's a solution for at least the copying portion of your request (thank you pinvoke.net):

[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
static extern bool CopyFile(string lpExistingFileName, string lpNewFileName, bool bFailIfExists);

And then to actually copy your file:

// Don't forget the '\\?\' for long paths
string reallyLongPath = @"\\?\d:\abc\bcd\cd\cdc\dc\..........";
string destination = @"C:\some\other\path\filename.txt";
CopyFile(reallyLongPath , destination, false);
like image 178
Jon Senchyna Avatar answered Nov 05 '22 15:11

Jon Senchyna


try with this code

var path = Path.Combine(@"\\?\", filesToBeCopied[j]); //don't forget extension

"\?\" 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.

Important : Not all file I/O APIs support "\?\", you should look at the reference topic for each API

like image 25
Aghilas Yakoub Avatar answered Nov 05 '22 13:11

Aghilas Yakoub