将所有pdf文件从一个路径复制到另一个路径而不在c#中循环

时间:2016-05-04 04:45:55

标签: c# file pdf directory copy

我正在尝试将所有PDF文件(.Pdf)文件从源文件夹复制到目标。我用foreach循环编写了它。但我想在没有任何循环的情况下这样做。如果有任何选择,那该怎么办?请帮帮我..

我的代码

   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);
            }
    }

4 个答案:

答案 0 :(得分:1)

在复制之前尝试过滤:

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

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

答案 1 :(得分:0)

你可以这样做:

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 :(得分:0)

由于您在评论中提到过,源目录包含大量文件,并且您希望将其限制为仅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);
}

答案 3 :(得分:0)

我会做这样的事情:

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);
}

确保您添加了' \'在源路径的末尾