如何在基于 .net 的窗口中检查文件夹的“剪切”权限

本文关键字:文件夹 检查 剪切 权限 窗口 net | 更新日期: 2023-09-27 18:36:09

在我的项目中,我想将文件夹移动到目的地。这是我的想法。第一种情况,我想检查我可以移动文件夹吗,如果我没有权限我不会检查文件夹中的子项。移动操作已完成。第二种情况,如果我有移动文件夹的权限,我会检查文件夹中的所有子项,然后移动我可以移动的项目,留下我不能移动的项目。所以我不知道如何实现第一个场景。如果我在场景中捕获未经授权的访问异常。我可能会阻止第二种情况,因为在第二种情况下,在移动文件夹时,如果某些子项无法移动,它也会抛出异常。有人可以给我一些建议吗?

如何在基于 .net 的窗口中检查文件夹的“剪切”权限

我没有测试这个,但它应该给你一个开始:

public static void MoveDirectory(string source, string target)
{
    var delSourceAtEnd = true;
    var sourcePath = source.TrimEnd('''', ' ');
    var targetPath = target.TrimEnd('''', ' ');
    var files = Directory.EnumerateFiles(sourcePath, "*", SearchOption.AllDirectories)
                            .GroupBy(Path.GetDirectoryName);
    foreach (var folder in files)
    {
        var failed = false;
        var targetFolder = folder.Key.Replace(sourcePath, targetPath);
        Directory.CreateDirectory(targetFolder);
        foreach (var file in folder)
        {
            var targetFile = Path.Combine(targetFolder, Path.GetFileName(file));
            try
            {
                File.Move(file, targetFile);
            } catch (UnauthorizedAccessException uae)
            {
                failed = true;
                delSourceAtEnd = false;
            }
        }
        if (!failed) Directory.Delete(folder.Key);
    }
    if (delSourceAtEnd) Directory.Delete(source, false);
}

这在很大程度上基于此答案,它显示了如何手动移动目录并单独处理单个文件和文件夹的不同选项。