C# 比较文本框中的路径
我的WinForm中有几个文本框。然后在这些文本框中插入一些文件的路径-例如: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) 如何用最少
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)对不起,我还有一个问题。这些组框位于名为mainPanel的面板上。我怎样才能访问面板上的那些?非常感谢你的帮助和耐心:)这些都不管用。无论我在文本框中写什么,AllFileExist总是给我true,IsDuplicate总是给我false,即使我在文本框中放了两个相同的文件。如果您的文本框是表单的直接子项,则此代码将起作用。如果它们位于另一个容器内,则需要使用该容器的控件集合。哦。我没想到。我的文本框位于6个不同的分组框中。我是C#的初学者,很抱歉想要这么多的细节,但你能告诉我如何使用控件集合吗。谢谢大家!@orglce在这种情况下,您应该使用groupBoxName.Controls,如果有多个groupBox,请尝试:this.Controls.OfType().SelectMany(x=>x.Controls.OfType()).Select(x=>x.Text)对不起,我还有一个问题。这些组框位于名为mainPanel的面板上。我怎样才能访问面板上的那些?非常感谢您的帮助和耐心:)