c# - 在文件夹中查找匹配的文件(减去文件扩展名)并将它们移动到新文件夹
问题描述
我有一个包含 Word 和 PDF 文件的文件目录。该目录中的某些 Word 文件与同一目录中的 PDF 文件具有相同的文件名(减去扩展名)。我已经设置了一个简单的 C# winforms 应用程序来遍历文件并移动与 PDF 文档同名的 Word 文档。这是我到目前为止所拥有的。我不确定为什么这不起作用:
string[] filesWORD = Directory.GetFiles(@"c:\test\", "*.docx");
List<string> resultFiles = new List<string>();
foreach (var file in filesWORD)
{
var finalfile = file.Substring(0, file.LastIndexOf(".")); // removes everything after period in name.
resultFiles.Add(finalfile);
listBox1.DataSource = resultFiles.Distinct().ToList(); // placing the Word files in listBox1
}
string[] filesPDF = Directory.GetFiles(@"c:\test\", "*.pdf");
List<string> resultFilesPDF = new List<string>();
foreach (var file in filesPDF)
{
var finalfile = file.Substring(0, file.LastIndexOf("."));
resultFilesPDF.Add(finalfile);
listBox2.DataSource = resultFilesPDF.Distinct().ToList(); // placing the PDF files in listBox2
}
for (int i = 0; i < listBox1.Items.Count; i++)
{
//IF the WORD files in listBox1 match the PDF files in listBox2 -- move them to a new folder.
foreach (string files in listBox1.Items)
{
if (listBox1.Items == listBox2.Items)
{
//Get Filename
var filename = Path.GetFileName(files + ".docx");
//Move Files
File.Move(files + ".docx", @"c:\test2\" + "\\" + filename);
}
}
}
解决方案
最后的 for 循环是问题所在,你可以试试这个(需要为你的情况添加列表框),你在比较错误的东西,也不需要外部 for 循环。
foreach (var pdfFile in resultFilesPDF)
{
foreach (var wordFile in resultFiles)
{
if (wordFile == pdfFile)
{
//Get Filename
var filename = System.IO.Path.GetFileName(wordFile + ".docx");
//Move Files
File.Move(wordFile + ".docx", @"c:\test2\" + "\\" + filename);
}
}
}
使用 Linq,您可以这样做,请注意,如果您尝试多次移动同一个文件,则 Move 方法可能会崩溃。
var sameNames = resultFiles.SelectMany(w => resultFilesPDF.Where(p => p == w));
sameNames.ToList().ForEach(file =>
{
File.Move(file + ".docx", @"c:\test2\" + "\\" + System.IO.Path.GetFileName(file + ".docx"));
});
推荐阅读
- wpf - WPF MVVM 根据对象类型打开视图
- php - PHP 致命错误:未捕获的错误:找不到类“Guzzle\Service\Command\Factory\AliasFactory”
- java - 如何在 AWS Lambda Java 中解析 Kinesis 数据流
- django - 如何在循环中显示django模板中的总订单
- excel - 在excel中使用数组搜索所有字符串
- android - Android:无法让 adb 在 debian buster 上从 Black BeagleBone 无线工作
- html - 如何将 target="_blank" 赋予 html 中的所有标签
- variables - 如何发送带有变量的 html 电子邮件
- firebase - 如何区分 Flutter 中的 firebase email auth 用户和 firebase google auth 用户?
- uml - 我是否在活动图中使用 foreach 进行 2 次不同的检查检查?