比较文本框中的路径

时间:2014-11-09 18:23:30

标签: c# visual-studio-2012 textbox

我的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)。
  3. 如何使用最少量的代码执行此操作?我的代码对于这种事情来说太长了。

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

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

1 个答案:

答案 0 :(得分:4)

首先使用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);