【问题标题】:What is the best way to move a folder inside itself?在其内部移动文件夹的最佳方法是什么?
【发布时间】:2013-08-10 04:32:40
【问题描述】:

假设我想在其内部移动一个文件夹,其以前的内容为空,但对于新文件夹,我将如何最好地使用代码来处理它。通常,在资源管理器中,您可以通过剪切文件夹的内容并将其放入在原始文件夹中创建的新文件夹中来实现此目的。

原始路径:C:\Users\Previous

新路径:C:\Users\Previous\Previous

【问题讨论】:

  • 我通常会创建一个具有不同名称的新文件夹,将旧文件夹移到其中,然后将新文件夹重命名为旧名称。那应该是一次创建、一次移动操作和一次重命名。您的剪切/粘贴方法需要对其中包含的每个文件/文件夹进行一次移动。
  • 1.重命名为C:\Users\Previous_Some_Temp_Name。 2. 创建C:\Users\Previous。 3. 使用Directory.MoveC:\Users\Previous_Some_Temp_Name 移动到C:\Users\Previous。好的,我现在看到 Damien 的方法是等效的,但不知何故让我感觉更干净。

标签: c# winapi directory


【解决方案1】:

由于您想将文件夹及其内容移动到同名的子文件夹中,您可以执行以下操作:

private void button1_Click(object sender, EventArgs e)
{
    CopyContentsToSubFolderWithSameName(@"C:\Users\Previous");
}

private void CopyContentsToSubFolderWithSameName(string path)
{
    DirectoryInfo currDir = new DirectoryInfo(path);
    DirectoryInfo subDir =
        Directory.CreateDirectory(Path.Combine(currDir.FullName, currDir.Name));
    IEnumerable<DirectoryInfo> parentFolders = 
        subDir.Parent.EnumerateDirectories();

    // Copy files in the current directory to the destination directory
    foreach (FileInfo file in currDir.GetFiles())
    {
        file.MoveTo(Path.Combine(subDir.FullName, file.Name));
    }

    // Copy directories (including files) in the current directory 
    // to the destination directory
    foreach (DirectoryInfo dir in parentFolders)
    {
        if (dir.Name != subDir.Name)
        {
            dir.MoveTo(Path.Combine(subDir.FullName, dir.Name));
        }
    }
}

【讨论】:

    【解决方案2】:
    1. 创建临时文件夹:c:\user\temp
    2. 将带有Move 的目录从c:\user\previous 移动到:c:\user\temp
    3. 将带有Move 的临时文件夹从c:\user\temp 重命名为c:\user\previous

    【讨论】:

    • 你不能通过调用Move来做到这一点
    猜你喜欢
    • 1970-01-01
    • 2011-03-10
    • 2018-07-09
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    相关资源
    最近更新 更多