将文件从子文件夹和主目录复制到另一个位置C#

时间:2018-08-28 03:46:49

标签: c#

首先,我想说我喜欢这个网站。这些年来,它一直非常有帮助。

当前,我在桌面C:\Users\Donjf\Desktop\New folder上有一个文件夹,在桌面上的该文件夹中,有一个名为DVNSHP012的子文件夹或目录,其中包含xml文件。 C:\Users\Donjf\Desktop\New folder也包含xml个文件。

我目前只能使用以下代码从xml的主目录传输C:\Users\Donjf\Desktop\New folder文件。

//Copy all the files & Replaces any files with the same name foreach (string newPath in Directory.GetFiles(DESKTOPLHA54U4, "*.xml", SearchOption.AllDirectories)) File.Copy(newPath, newPath.Replace(DESKTOPLHA54U4, path), true);

以上代码再次仅从C:\Users\Donjf\Desktop\New文件夹的主目录传输,而不从包括C:\Users\Donjf\Desktop\New folder\DVNSHP012的整个目录传输。我目前正在尝试搜索所有子目录,包括.xml文件的主目录,然后将那些xml's转移到\downloads\

这是我到目前为止尝试过的。

if (!Directory.Exists(path)) Directory.CreateDirectory(path);
            {
                TestWebMsgApp.WebMsgBox.Show("Folder created in root of drive");
            }
            foreach (string dirPath in Directory.GetDirectories(DESKTOPLHA54U4, "*", SearchOption.AllDirectories))
            {
                Directory.CreateDirectory(dirPath.Replace(DESKTOPLHA54U4, path));
                if (Directory.Exists(DESKTOPLHA54U4))
                {
                    //Copy all the files & Replaces any files with the same name
                    foreach (string newPath in Directory.GetFiles(DESKTOPLHA54U4, "*.xml",
                        SearchOption.AllDirectories))
                        File.Copy(newPath, newPath.Replace(DESKTOPLHA54U4, path), true);
                }
            }

在这里发布之前,我也尝试过搜索整个google和SO,但似乎与我的特定问题无关。有没有办法搜索所有* .xml文件,包括子目录?预先感谢您的任何帮助。

1 个答案:

答案 0 :(得分:0)

您的代码应该可以正常工作,您只需要添加在目标文件夹中创建(子)目录的代码,因为File.Copy()不会创建它们(如果尚不存在)。这对我有用:

var DESKTOPLHA54U4 = @"C:\Users\Donjf\Desktop\New folder\";
var path = @"C:\downloads\";

foreach (string newPath in Directory.GetFiles(DESKTOPLHA54U4, "*.xml", SearchOption.AllDirectories))
{
    // Ensure that target subdirectory exists
    Directory.CreateDirectory(Path.GetDirectoryName(newPath.Replace(DESKTOPLHA54U4, path)));

    File.Copy(newPath, newPath.Replace(DESKTOPLHA54U4, path), true);
}

或者,您可以创建递归复制目录(和子目录)的方法:

public static void CopyDirectory(string sourceDirectory, string destinationDirectory, string fileSearchPattern)
{
    // Ensures that (sub)target directory exists.
    Directory.CreateDirectory(destinationDirectory);

    foreach (string subDir in Directory.EnumerateDirectories(sourceDirectory))
    {
        // Recursively call CopyDirectory() for all subdirectories
        CopyDirectory(
            subDir,
            Path.Combine(destinationDirectory, Path.GetFileName(subDir)),
            fileSearchPattern);
    }

    foreach (string file in Directory.EnumerateFiles(sourceDirectory, fileSearchPattern, SearchOption.TopDirectoryOnly))
    {
        File.Copy(
            file,
            Path.Combine(destinationDirectory, Path.GetFileName(file)),
            true);
    }
}

并命名为:

CopyDirectory(@"C:\Users\Donjf\Desktop\New folder\", @"C:\downloads\", "*.xml");