复制目录的所有内容并更改现有内容的名称

时间:2014-10-10 15:37:13

标签: c# directory

这是一个初学者。我正在尝试将所有内容从一个文件夹复制到另一个文件夹。 假设初始文件夹名为 inputDir ,我正在将文件复制到的文件夹名为 outputDir 。问题是, outputDir 已经包含了一些文件,它们的名称就像 inputDir 中的文件一样。这看起来很像:

- inputDir
 * hit0.png
 * hit100.png
 * hit300.png

- outputDir
 * hit0.png
 * hit100.png
 * hit300.png

我要做的是首先重命名 outputDir 中的所有文件,以便它们在扩展名之前在其名称末尾包含字符“bak”,然后复制所有文件 inputDir outputDir 的文件。简而言之,我希望它看起来像这样:

- inputDir
 * hit0.png
 * hit100.png
 * hit300.png

- outputDir
 * hit0.png
 * hit0bak.png
 * hit100.png
 * hit100bak.png
 * hit300.png
 * hit300bak.png

到目前为止,我已尝试为每个文件单独执行此操作,并且工作正常;但是,为20个以上的文件编写相同的代码是很多单调的工作,所以我很想知道是否有更快的方法在C#中完成它(是的,我需要在C#中完成它,因为程序比我在这里写的更多,但我已经涵盖了其他一切)。 提前感谢您的帮助。

这就是我到目前为止所尝试的:

if (File.Exists(outputDir + "\\" + "hit0.png"))
                {                    
                    File.Move(outputDir + "\\" + "hit0.png", outputDir + "\\" + "hit0bak.png");
                    File.Move(outputDir + "\\" + "hit100.png", outputDir + "\\" + "hit100bak.png");
                    File.Move(outputDir + "\\" + "hit300.png", outputDir + "\\" + "hit300bak.png");
                }
           File.Copy(inputDir + "\\" + "hit0.png", outputDir + "\\" + "hit0.png");
           File.Copy(inputDir + "\\" + "hit100.png", outputDir + "\\" + "hit100.png");
           File.Copy(inputDir + "\\" + "hit300.png", outputDir + "\\" + "hit100.png");

1 个答案:

答案 0 :(得分:0)

        var sourcePath = @"c:\source\path";
        var destPath = @"c:\dest\path";

        var sourceDirInfo = new System.IO.DirectoryInfo(sourcePath);

        foreach (var sourceFileInfo in sourceDirInfo.GetFiles())
        {
            if (File.Exists(Path.Combine(destPath, sourceFileInfo.Name)))
            {
                var bakName = sourceFileInfo.Name.Replace(".", "bak.");

                File.Move(Path.Combine(destPath, sourceFileInfo.Name),
                    Path.Combine(destPath, bakName));
            }

            File.Copy(Path.Combine(sourcePath, sourceFileInfo.Name),
                Path.Combine(destPath, sourceFileInfo.Name));
        }

(警告 - 仅适用于文件名中包含一个'。')