Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从网络共享中删除长路径过长文件夹_C#_Filesystemobject - Fatal编程技术网

C# 从网络共享中删除长路径过长文件夹

C# 从网络共享中删除长路径过长文件夹,c#,filesystemobject,C#,Filesystemobject,我正在尝试使用C#删除网络上共享位置中的文件夹。某些文件夹路径太长,Windows无法处理。我为此尝试了多种选择。我发现最好的方法是创建一个FileSystemObject,将\\?\添加到路径中,并在我要删除的路径上调用DeleteFolder,这在我的本地计算机上适用于太长的路径,因为我已经映射了C:和G:等驱动器,但当我尝试在网络共享文件夹上使用它时,我会得到一个HRESULT:0x800A004C(CTL_E_PATHNOTFOUND)或值不在预期范围内 以下是我的代码: private

我正在尝试使用C#删除网络上共享位置中的文件夹。某些文件夹路径太长,Windows无法处理。我为此尝试了多种选择。我发现最好的方法是创建一个FileSystemObject,将\\?\添加到路径中,并在我要删除的路径上调用DeleteFolder,这在我的本地计算机上适用于太长的路径,因为我已经映射了C:和G:等驱动器,但当我尝试在网络共享文件夹上使用它时,我会得到一个HRESULT:0x800A004C(CTL_E_PATHNOTFOUND)或值不在预期范围内

以下是我的代码:

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)