如何跳过复制C#中的只读目录

时间:2015-08-20 06:29:37

标签: c# exception copy unauthorizedaccessexcepti

我尝试编写一个代码,它将复制来自give目录及其所有子目录的所有文件。 (仅复制文件而不是目录)。

到目前为止我已经

$scope.finalData

我在这里遇到两个问题。

  1. 我收到了未经授权的访问异常。源目录中有一个文件夹正在创建问题。

    • enter image description here
  2. 第二个问题是。如果它复制,则复制源目录中的所有文件和文件夹。但我只需要文件。

    这两个问题的解决方案是什么?

1 个答案:

答案 0 :(得分:1)

确定复制所有子目录,依此类推,省略任何不允许您访问的内容:

在调用copy之前,您需要检查targetDir是否存在。

if (!Directory.Exists(targetDir)) Directory.CreateDirectory(targetDir);

你应该检查它是否可以做到这一点,然后以递归方式将文件夹复制到同一个文件夹中:

public static void Copy(string sourceDir, string targetDir)
{
  try
  {
    foreach(var file in Directory.GetFiles(sourceDir))
    try 
      {  File.Copy(file, Path.Combine(targetDir, Path.GetFileName(file)),true);}  
      catch {} // you could do other things to handle different issues - like lack of space, etc

    foreach(var directory in Directory.GetDirectories(sourceDir))
        Copy(directory, targetDir)); // this will go into each subdirectory, and do the same.
   }
   catch {} // catches unable to access directory you've gone into
 }

}

如果您希望将平面转储到文件夹中,通过尝试附加路径等来复制您正在重新创建整个目录结构,则保持最终目标相同。