我尝试使用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,这将是我发送到删除功能的路径字符串
然后tmpPath显示为" \\\\?\\\\\\ myServer \\ mySharedFolder \\ folder1 \\ etc \\ etc"
我对UNC了解不多,所以我不知道这是不是错了。我很确定我的tmpPath变量有问题,但我不确定。也许这是一个语法错误但是我不能为我的生活弄清楚什么是错的。在此先感谢您的帮助
编辑:我相信我找到了答案,我现在正在测试它。到目前为止,它对我有用。如果我在以下路径上运行DeleteFolder方法\\?\ UNC \ server \ sharedFolder \ folder1 \ etc \ etc"这似乎有效。现在我只需弄清楚如何摆脱所有这些额外的斜线。编辑2:这确实有效,在网络上的共享文件夹上进行了测试。它只是让我不了解UNC路径。
答案 0 :(得分:0)
删除太长路径的安全方法是使用AlphaFS。 AlphaFS是一个.NET库,它为.NET平台提供了比标准System.IO类更完整的Win32文件系统功能。标准.NET System.IO的最明显缺陷是缺乏对高级NTFS功能的支持,尤其是对扩展长度路径的支持(例如,文件/目录路径长于260个字符)。
请参阅目录删除:http://alphafs.alphaleonis.com/doc/2.2/api/html/BE179564.htm
Alphaleonis.Win32.Filesystem.Directory.Delete(path)