C# 从网络共享中删除长路径过长文件夹
我正在尝试使用C#删除网络上共享位置中的文件夹。某些文件夹路径太长,Windows无法处理。我为此尝试了多种选择。我发现最好的方法是创建一个FileSystemObject,将\\?\添加到路径中,并在我要删除的路径上调用DeleteFolder,这在我的本地计算机上适用于太长的路径,因为我已经映射了C:和G:等驱动器,但当我尝试在网络共享文件夹上使用它时,我会得到一个HRESULT:0x800A004C(CTL_E_PATHNOTFOUND)或值不在预期范围内 以下是我的代码:C# 从网络共享中删除长路径过长文件夹,c#,filesystemobject,C#,Filesystemobject,我正在尝试使用C#删除网络上共享位置中的文件夹。某些文件夹路径太长,Windows无法处理。我为此尝试了多种选择。我发现最好的方法是创建一个FileSystemObject,将\\?\添加到路径中,并在我要删除的路径上调用DeleteFolder,这在我的本地计算机上适用于太长的路径,因为我已经映射了C:和G:等驱动器,但当我尝试在网络共享文件夹上使用它时,我会得到一个HRESULT:0x800A004C(CTL_E_PATHNOTFOUND)或值不在预期范围内 以下是我的代码: private
private static void DeletePathWithLongFileNames(string path)
{
string tmpPath = @"\\?\" + path;
FileSystemObject fso = new FileSystemObject();
fso.DeleteFolder(tmpPath, true);
}
例如,网络+共享文件夹是\\myServer\mySharedFolder\folder1\etc\etc,这将是我发送给delete函数的路径字符串
然后tmpPath显示为“\\\?\\myServer\\mySharedFolder\\folder1\\etc\\etc”
我不太了解UNC,所以我不知道这是否是错误的。我很确定我的tmpPath变量有问题,但我也不确定。可能是语法错误,但我一辈子都无法找出问题所在。提前感谢您的帮助
编辑:我相信我已经找到了答案,我现在正在测试它。到目前为止,它对我有效。如果我在以下路径上运行DeleteFolder方法\\?\UNC\server\sharedFolder\folder1\etc\etc“这似乎有效。现在我只需要找出如何去掉所有额外的斜杠
编辑2:这确实有效,在网络上的共享文件夹上进行了测试。问题是我不了解UNC路径。删除过长路径的安全方法是使用AlphaFS。AlphaFS是一个.NET库,为.NET平台提供了比标准system.IO类更完整的Win32文件系统功能。最重要的是标准.NET System.IO的不足之处在于缺乏对高级NTFS功能的支持,最显著的是对扩展长度路径的支持(例如,文件/目录路径长度超过260个字符) 请参阅目录删除:
编辑将此更改为一个完全不同的答案。我认为这基本上是好的,因为没有人对它进行投票,但第一次修订中的信息可能仍然对某些人有用,特别是因为当前的修订版提供了一个用C编写的GUI应用程序,作为C#问题的解决方案。在我看来,这是一种错误what’这个答案是错误的/没有帮助的,因为它不再解决所问的问题了。
Alphaleonis.Win32.Filesystem.Directory.Delete(path)