繁体   English   中英

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

[英]Copy all pdf files from one path to another without loop in c#

我正在尝试将所有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);
    }
}

尝试在复制前进行过滤:

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

参考: 可以使用多个过滤器调用Directory.GetFiles()吗?

您可以执行以下操作:

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 
}

正如您在注释中提到的那样,源目录包含很多文件,并且您希望将其限制为仅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);
}

我会做这样的事情:

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

确保在源路径的末尾添加“ \\”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM