0

我试图编写一个代码,它将复制给定目录及其所有子目录中的所有文件。(只复制文件而不是目录)。

这是到目前为止我有

public static void Copy(string sourceDir, string targetDir)
{
    Directory.CreateDirectory(targetDir);        
    foreach(var file in Directory.GetFiles(sourceDir))
        File.Copy(file, Path.Combine(targetDir, Path.GetFileName(file)),true);

    foreach(var directory in Directory.GetDirectories(sourceDir))
        Copy(directory, Path.Combine(targetDir, Path.GetFileName(directory)));
}

我在这里面临两个问题。

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

    • 在此处输入图像描述

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

这两个问题的任何解决方案?

4

1 回答 1

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
 }

}

如果您想要将平面转储到文件夹中,则可以通过尝试附加路径等来复制您正在重新创建整个目录结构,从而使最终目的地保持不变。

于 2015-08-20T06:56:18.600 回答