【问题标题】:How do I check the "cut" permission of a folder in windows based on .net如何检查基于.net的windows中文件夹的“剪切”权限
【发布时间】:2016-02-25 02:22:10
【问题描述】:

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

【问题讨论】:

  • 不要检查您是否可以移动文件/文件夹,只是尝试这样做。有关详细信息,请参阅this answer。
  • 所以你想要 1) 尝试移动整个目录,如果失败 2) 尝试一个一个移动所有包含的文件。这是正确的吗?你想如何处理子目录?您希望该方法以递归方式工作吗?
  • 是的,我想递归工作,只移动可移动的子目录,而移动完整目录失败。
  • 那请看我的回答。它不是基于递归,而是按您的预期工作。

标签: c# .net windows


【解决方案1】:

我没有对此进行测试,但它应该给你一个开始:

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);
}

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-10
  • 2015-10-16
  • 1970-01-01
  • 2011-08-20
  • 2011-05-22
  • 1970-01-01
相关资源
最近更新 更多