【问题标题】:Copy a folders files xcopy(ish) style (Q&A)复制文件夹文件 xcopy(ish) 样式 (Q&A)
【发布时间】:2014-04-04 19:26:22
【问题描述】:

我想做一些事情

  1. 复制文件,如 xcopy source target /d
  2. 复制文件,如 xcopy source target /d /s
  3. 使用可选掩码复制上述任何文件
  4. 将所有文件从源文件夹和子文件夹复制到目标文件夹

【问题讨论】:

  • 只要使用 robocopy,效果很好
  • 因此您建议我们告诉所有客户购买第 3 方产品,因为我们无法添加下面的 20 行。真的吗?
  • Robocopy 自带 Windows
  • 我们可以讨论将我们产品的成功建立在免费赠品的可用性和持续功能支持或普通用户选择正确文件/文件夹的能力上的利弊,但是我不认为这是场地。可以说我是在编码人员而不是最终用户的背景下编写的。谢谢阅读。我希望你能从代码中获得一些价值。

标签: c#


【解决方案1】:

如果目标不存在,则使用“|| !destFile.Exists”可以更清晰地阅读代码。从技术上讲,为不存在的文件创建文件信息将具有 DateTime.Min 的 LastWriteTime,因此它复制但在可读性方面有点不足。更强大的错误处理程序将是理想的,但这是另一个主题。 :) 我希望这个经过测试的代码对某人有所帮助。

复制文件,如 xcopy source target /d

CopyFolderContents(sourceFolder, destinationFolder);

复制文件,如 xcopy source target /d /s

CopyFolderContents(sourceFolder, destinationFolder, "*.*", true, true);

使用可选掩码复制上述任何文件

CopyFolderContents(sourceFolder, destinationFolder, "*.png", true, true);

将所有文件从源文件夹和子文件夹复制到目标文件夹

CopyFolderContents(sourceFolder, destinationFolder, "*.*", false, true);

为了您的方便,这里的问题是带有重载的代码。

public void CopyFolderContents(string sourceFolder, string destinationFolder)
{
    CopyFolderContents(sourceFolder, destinationFolder, "*.*", false, false);
}

public void CopyFolderContents(string sourceFolder, string destinationFolder, string mask)
{
    CopyFolderContents(sourceFolder, destinationFolder, mask, false, false);
}

public void CopyFolderContents(string sourceFolder, string destinationFolder, string mask, Boolean createFolders, Boolean recurseFolders)
{
    try
    {
        if (!sourceFolder.EndsWith(@"\")){ sourceFolder += @"\"; }
        if (!destinationFolder.EndsWith(@"\")){ destinationFolder += @"\"; }

        var exDir = sourceFolder;
        var dir = new DirectoryInfo(exDir);
        SearchOption so = (recurseFolders ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);

        foreach (string sourceFile in Directory.GetFiles(dir.ToString(), mask, so))
        {
            FileInfo srcFile = new FileInfo(sourceFile);
            string srcFileName = srcFile.Name;

            // Create a destination that matches the source structure
            FileInfo destFile = new FileInfo(destinationFolder + srcFile.FullName.Replace(sourceFolder, ""));

            if (!Directory.Exists(destFile.DirectoryName ) && createFolders)
            {
                Directory.CreateDirectory(destFile.DirectoryName);
            }

            if (srcFile.LastWriteTime > destFile.LastWriteTime || !destFile.Exists)
            {
                File.Copy(srcFile.FullName, destFile.FullName, true);
            }
        }
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine(ex.Message + Environment.NewLine + Environment.NewLine + ex.StackTrace);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    相关资源
    最近更新 更多