繁体   English   中英

C#帮助需要更改代码以删除具有长路径的文件夹

[英]C# Help needed changing code that deletes folders with long paths

前一段时间我问了一个关于stackoverflow的问题,关于删除具有长路径(> 260个字符)的文件夹,最流行的解决方案是移入每个目录以减少路径的长度。 我一直在为此而苦苦挣扎,无法继续进行下去,有人可以建议我将建议的代码整合到我的代码中吗?

典型的路径是:

\\\\ serverName \\ share \\ dave \\ Private \\ Careers \\ Careers Ed \\ Fun Careers Education \\ Chris's not used 2006 to07 \\ old 4.Careers Area Activity Week 1 1 30.10.06或6.11.06或13.11.06介绍工作水平和职业资源\\职业领域和职位水平导师帮助表[1] .doc

非常感谢

//建议的代码:

var curDir = Directory.GetCurrentDirectory();
Environment.CurrentDirectory = @"C:\Part\Of\The\Really\Long\Path";
Directory.Delete("Relative\Path\To\Directory");
Environment.CurrentDirectory = curDir;

//我的代码:

try
 {
     var dir = new DirectoryInfo(@FolderPath);
     dir.Attributes = dir.Attributes & ~FileAttributes.ReadOnly;
     dir.Delete();
 }
 catch (IOException ex)
 {
     MessageBox.Show(ex.Message,"Delete Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
 }

在“删除目录”之前,我们必须确保它为空。 您可以考虑使用相反的“目录遍历”方法。

这将需要按照从浅到深的顺序分别处理每个目录。

一些伪代码;

While (fullPath.Length > 0)
{
    DirectoryToDelete = GetLastPartOfPath( fullPath );
    CurrentDirectory = fullPath - DirectoryToDelete;

    ChangeDirectory(CurrentDirectory);
    DeleteDirectory(DirectoryToDelete);

    fullPath = fullPath - DirectoryToDelete;
}

希望这可以帮助,

您是否尝试过使用长路径名语法? 通过平台SDK中的CreateFile函数:

最大路径长度在Windows API(稍后会讨论某些例外情况)中,路径的最大长度为MAX_PATH,它定义为260个字符。 本地路径按以下顺序构造:驱动器号,冒号,反斜杠,由反斜杠分隔的组件以及终止的空字符。 例如,驱动器D上的最大路径是“ D:\\ <256个字符> NUL”。

Windows API具有许多功能,它们也具有Unicode版本,以允许最大路径长度为大约32,000个字符,这些路径由最多255个字符的组件组成。 要指定这种扩展长度的路径,请使用“ \\?\\”前缀。 例如,“ \\?\\ D:\\”。

注意最大路径为32,000个字符,因为“ \\?\\”前缀可以扩展为更长的字符串,并且扩展适用于总长度。

要使用UNC指定这样的路径,请使用“ \\?\\ UNC \\”前缀。 例如,“ \\?\\ UNC \\\\”。 这些前缀不用作路径本身的一部分。 它们指示路径应该以最小的修改传递给系统,这意味着您不能使用正斜杠来表示路径分隔符,也不能使用句点来表示当前目录。 另外,您不能将“ \\?\\”前缀与相对路径一起使用。 相对路径限制为MAX_PATH个字符。

最后一段当然是与您的案件有关的一段。

不确定.NET是否支持这种路径。 您可以使用P / Invoke从Win32 SDK调用RemoveDirectory。

使用ZetaLongPaths。 它处理长路径。 Google ZetaLongPaths

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM