比较文本框中的路径

本文关键字:路径 文本 比较 | 更新日期: 2023-09-27 18:29:57

我的WinForm中有几个文本框。然后我在这些文本框中插入一些文件的路径,例如:

textbox1: C:'Users'File1.txt
textbox2: C:'Users'John'Desktop'File2.txt
textbox3: C:'File1.txt
textbox4: D:'Stuff'File3.txt
.
.
.

我正在尝试检查:

  1. 如果每个文件都存在(例如,在这种情况下可能File3.txt不存在)
  2. 如果任何文件具有相同的名称(例如,在本例中为File1.txt

我如何用最少的代码量完成这项工作?我的代码对于这种事情来说太长了。

这是我用来检查文件是否存在的。我不知道如何开始处理重复的文件。

int filesDontExist = 0;
if (!String.IsNullOrEmpty(textbox1.Text))
{   
    if (!File.Exists(textbox1.Text)) { filesDontExist++; }
}
if (!String.IsNullOrEmpty(textbox2.Text))
{
    if (!File.Exists(textbox2.Text)) { filesDontExist++; }
}
if (!String.IsNullOrEmpty(textbox3.Text))
{
    if (!File.Exists(textbox3.Text)) { filesDontExist++; }
}
if (!String.IsNullOrEmpty(textbox4.Text))
{
    if (!File.Exists(textbox4.Text)) { filesDontExist++; }
}
if (filesDontExist == 0) { MessageBox.Show("All files exist!"); }
else { MessageBox.Show("At least one file doesn't exist!"); }

比较文本框中的路径

首先使用LINQ的Select方法获取所有路径:

var paths = this.Controls.OfType<TextBox>().Select(x => x.Text);

然后使用File.Exists确定是否存在所有文件:

var allFilesExist = paths.All(File.Exists);

使用Path.GetFileName方法获取所有文件名,然后使用GroupBy:检查是否存在重复

var isDuplicate = paths.Select(x => Path.GetFileName(x))
                  .GroupBy(x => x)
                  .Any(g => g.Count() > 1);