访问路径'c:\ $ Recycle.Bin\S-1-5-18'被拒绝

Uma*_*air 7 .net c# managementeventwatcher

我有这个代码将所有文件从source-directory复制F:\到目标目录.

public void Copy(string sourceDir, string targetDir)
{
  //Exception occurs at this line.
    string[] files = System.IO.Directory.GetFiles(sourceDir, "*.jpg", 
                                             SearchOption.AllDirectories);

    foreach (string srcPath in files)
    {
       File.Copy(srcPath, srcPath.Replace(sourceDir, targetDir), true);
    }
}
Run Code Online (Sandbox Code Playgroud)

并获得例外.

如果我省略SearchOption.AllDirectories并且它可以工作但只复制文件F:\

Boh*_*dan 5

使用以下函数代替 System.IO.Directory.GetFiles:

IEnumerable<String> GetAllFiles(string path, string searchPattern)
    {
        return System.IO.Directory.EnumerateFiles(path, searchPattern).Union(
            System.IO.Directory.EnumerateDirectories(path).SelectMany(d =>
            {
                try
                {
                    return GetAllFiles(d,searchPattern);
                }
                catch (UnauthorizedAccessException e)
                {
                    return Enumerable.Empty<String>();
                }
            }));
    }
Run Code Online (Sandbox Code Playgroud)


wou*_*rvs 0

该文件夹是一个安全的系统文件夹(您的垃圾箱,每个驱动器都有自己的垃圾箱)。只需将 file.copy 放入 try catch 语句中并忽略/记录所有失败。这样您将只复制实际文件并跳过系统文件/文件夹。

如果你确实想避免使用 try catch 语句。使用 fileinfo 和目录信息类来确定哪些文件夹/文件属于系统并将抛出异常。