C# 比较文本框中的路径

C# 比较文本框中的路径,c#,visual-studio-2012,textbox,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 . . . 我正在检查: 如果每个文件都存在(例如,在这种情况下可能不存在File3.txt) 如果任何文件具有相同的名称(例如,在本例中为File1.txt) 如何用最少

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

textbox1: C:\Users\File1.txt
textbox2: C:\Users\John\Desktop\File2.txt
textbox3: C:\File1.txt
textbox4: D:\Stuff\File3.txt
.
.
.
我正在检查:

  • 如果每个文件都存在(例如,在这种情况下可能不存在
    File3.txt
  • 如果任何文件具有相同的名称(例如,在本例中为
    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);
    
    并使用
    Path.GetFileName
    方法获取所有文件名,然后使用
    GroupBy
    检查是否有重复的文件名:

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

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

    var paths = this.Controls.OfType<TextBox>().Select(x => x.Text);
    
    并使用
    Path.GetFileName
    方法获取所有文件名,然后使用
    GroupBy
    检查是否有重复的文件名:

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

    虽然您应该将其裁剪为演示您尝试过的内容所需的最低限度的代码,但您应该共享您拥有的代码。此外,如果您的代码有效,那么这本质上是一个代码审查问题,可能会被关闭为非主题。虽然您应该将其裁剪为演示您尝试过的内容所需的最低限度的代码,你应该分享你拥有的代码。而且,如果你的代码有效,那么这本质上是一个代码审查问题,有可能会因为主题外而被关闭。这些都不起作用。无论我在文本框中写什么,AllFileExist总是给我true,IsDuplicate总是给我false,即使我在文本框中放了两个相同的文件。如果您的文本框是表单的直接子项,则此代码将起作用。如果它们位于另一个容器内,则需要使用该容器的控件集合。哦。我没想到。我的文本框位于6个不同的分组框中。我是C#的初学者,很抱歉想要这么多的细节,但你能告诉我如何使用控件集合吗。谢谢大家!@orglce在这种情况下,您应该使用groupBoxName.Controls,如果有多个groupBox,请尝试:
    this.Controls.OfType().SelectMany(x=>x.Controls.OfType()).Select(x=>x.Text)this.Controls.OfType().SelectMany(x=>x.Controls.OfType()).Select(x=>x.Text)