我正在尝试将所有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);
}
}
答案 0 :(得分:1)
在复制之前尝试过滤:
var files = Directory.GetFiles("C:\\path", "*.*", SearchOption.AllDirectories)
.Where(s => s.EndsWith(".pdf") );
答案 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);
}
确保您添加了' \'在源路径的末尾