📜  在 c-sharp 中复制整个目录的内容 - C# (1)

📅  最后修改于: 2023-12-03 15:23:07.620000             🧑  作者: Mango

在 C# 中复制整个目录的内容

在 C# 中复制整个目录的内容可能涉及到如下操作:

  1. 获取要复制的目录的路径。
  2. 判断目录是否存在。
  3. 创建新目录,用于放置复制的内容。
  4. 遍历要复制的目录中的所有文件和子目录,获取它们的路径,然后复制到新目录中。

下面我们将一步步介绍如何实现以上操作。

获取要复制的目录的路径

我们可以使用 System.Windows.Forms.FolderBrowserDialog 对话框来让用户选择要复制的目录,示例代码如下:

var folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog();

if (folderBrowserDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
    string sourceDirectory = folderBrowserDialog.SelectedPath;
}

上述代码将弹出一个对话框,用户可以选择要复制的目录的路径,选择完毕后,路径将被存储在 sourceDirectory 变量中。注意,之前必须引入 System.Windows.Forms 命名空间。

判断目录是否存在

在复制之前,我们需要判断要复制的目录是否存在,如果不存在,则不需要继续操作。我们可以使用 System.IO.Directory.Exists 方法来判断目录是否存在,示例代码如下:

if (System.IO.Directory.Exists(sourceDirectory))
{
    // 目录存在,可以继续操作
}
else
{
    // 目录不存在,不能进行复制操作
}

上述代码将检查 sourceDirectory 变量所存储的路径是否存在,如果存在,则下一步操作。否则,将无法进行复制操作。

创建新目录,用于放置复制的内容

在复制之前,我们需要创建一个新目录,用于存放要复制的内容。我们可以使用 System.IO.Directory.CreateDirectory 方法来创建新目录,示例代码如下:

string targetDirectory = @"D:\TargetDirectory";

if (!System.IO.Directory.Exists(targetDirectory))
{
    System.IO.Directory.CreateDirectory(targetDirectory);
}

上述代码将创建一个名为 TargetDirectory 的目录,路径为 D:\TargetDirectory。如果目录已经存在,则不会进行任何操作。

遍历要复制的目录中的所有文件和子目录

在操作之前,我们需要遍历要复制的目录中的所有文件和子目录,获取它们的路径,然后复制到新目录中。我们可以使用 System.IO.Directory.GetFilesSystem.IO.Directory.GetDirectories 方法来遍历目录中的所有文件和子目录,示例代码如下:

string[] files = System.IO.Directory.GetFiles(sourceDirectory, "*", System.IO.SearchOption.AllDirectories);

foreach (string file in files)
{
    string targetFile = System.IO.Path.Combine(targetDirectory, System.IO.Path.GetFileName(file));
    System.IO.File.Copy(file, targetFile, true);
}

string[] directories = System.IO.Directory.GetDirectories(sourceDirectory, "*", System.IO.SearchOption.AllDirectories);

foreach (string directory in directories)
{
    string targetDirectoryPath = System.IO.Path.Combine(targetDirectory, directory.Substring(sourceDirectory.Length));
    System.IO.Directory.CreateDirectory(targetDirectoryPath);
}

上述代码将遍历要复制的目录中的所有文件和子目录,并将它们复制到新目录中。注意,如果遇到同名文件,将覆盖原有文件。

Markdown 格式代码片段如下:

```csharp
var folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog();

if (folderBrowserDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
    string sourceDirectory = folderBrowserDialog.SelectedPath;
}

if (System.IO.Directory.Exists(sourceDirectory))
{
    string targetDirectory = @"D:\TargetDirectory";

    if (!System.IO.Directory.Exists(targetDirectory))
    {
        System.IO.Directory.CreateDirectory(targetDirectory);
    }

    string[] files = System.IO.Directory.GetFiles(sourceDirectory, "*", System.IO.SearchOption.AllDirectories);

    foreach (string file in files)
    {
        string targetFile = System.IO.Path.Combine(targetDirectory, System.IO.Path.GetFileName(file));
        System.IO.File.Copy(file, targetFile, true);
    }

    string[] directories = System.IO.Directory.GetDirectories(sourceDirectory, "*", System.IO.SearchOption.AllDirectories);

    foreach (string directory in directories)
    {
        string targetDirectoryPath = System.IO.Path.Combine(targetDirectory, directory.Substring(sourceDirectory.Length));
        System.IO.Directory.CreateDirectory(targetDirectoryPath);
    }
}
else
{
    Console.WriteLine($"Directory {sourceDirectory} does not exist.");
}