【问题标题】:Copy all pdf files from one path to another without loop in c#将所有pdf文件从一个路径复制到另一个路径,而无需在c#中循环
【发布时间】:2016-08-29 08:35:06
【问题描述】:

我正在尝试将所有 PDF 文件 (.pdf) 从源文件夹复制到目标。我已经使用foreach 循环编写了它,但我想在没有 for 或任何循环的情况下执行它。有没有办法做到这一点,如果有,怎么做?

我的代码

string sourcePath = @"D:\DataArchiveTest\From";
string targetPath = @"D:\DataArchiveTest\To";
foreach (var sourceFilePath in Directory.GetFiles(sourcePath))
{
    string fileName = Path.GetFileName(sourceFilePath);
    string destinationFilePath = Path.Combine(targetPath, fileName);
    if (fileName.ToUpper().Contains(".PDF"))
    {
        System.IO.File.Copy(sourceFilePath, destinationFilePath, true);
    }
}

【问题讨论】:

标签: c# file pdf directory copy


【解决方案1】:

你可以这样做:

string sourcePath = @"D:\DataArchiveTest\From";
string targetPath = @"D:\DataArchiveTest\To";

var dir = new DirectoryInfo(sourcePath);
FileInfo[] files = dir.GetFiles("*.pdf");

foreach (var item in files)
{
   File.Copy(item.FullName, Path.Combine(targetPath, item.Name), true); // overwrite = true 
}

【讨论】:

    【解决方案2】:

    在复制前尝试过滤:

    var files = Directory.GetFiles("C:\\path", "*.*", SearchOption.AllDirectories)
                    .Where(s => s.EndsWith(".pdf") );
    

    参考:Can you call Directory.GetFiles() with multiple filters?

    【讨论】:

      【解决方案3】:

      由于您在 cmets 中提到,源目录有很多文件,并且您希望仅将其限制为 Pdf 文件(以提高性能),您可以使用重载的 Directory.GetFiles 允许您指定 搜索模式

      Directory.GetFiles(sourcePath, "*.pdf"); 
      

      现在我们可以将您的代码简化为

      string sourcePath = @"D:\DataArchiveTest\From";
      string targetPath = @"D:\DataArchiveTest\To";
      foreach (var sourceFilePath in Directory.GetFiles(sourcePath, "*.pdf"))
      {
              string fileName = Path.GetFileName(sourceFilePath);
              string destinationFilePath = Path.Combine(targetPath, fileName);
              System.IO.File.Copy(sourceFilePath, destinationFilePath, true);
      }
      

      【讨论】:

      • 但我不想使用 foreach 循环。也许我们可以使用 Parallel Each 循环??
      • 我们可以这样做,事实上这是个好主意。
      【解决方案4】:

      我会这样做:

      string target = @"D:\DataArchiveTest\To\";
      string source = @"D:\DataArchiveTest\From\";
      
      string[] files = Directory.GetFiles(source, ".*pdf", SearchOption.AllDirectories);
      
      foreach (string item in files)
      {
          //Add try - catch
          File.Copy(item, target + item.Replace(source, ""),true);
      }
      

      确保在源路径的末尾包含一个“\”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-31
        • 2013-05-29
        • 2015-07-12
        • 1970-01-01
        相关资源
        最近更新 更多