从C#中的C:Temp目录中获取包含特定SUBSTRING的FOLDER的名称
本文关键字:SUBSTRING 包含特 FOLDER 获取 中的 Temp | 更新日期: 2023-09-27 18:28:47
Guys正如标题所说,我必须获得具有特定(用户指定)子字符串的FOLDERS的名称。
我有一个文本框,用户将在其中输入所需的子字符串。我正在使用下面的代码来实现我的目标。
string name = txtNameSubstring.Text;
string[] allFiles = System.IO.Directory.GetFiles("C:''Temp");//Change path to yours
foreach (string file in allFiles)
{
if (file.Contains(name))
{
cblFolderSelect.Items.Add(allFiles);
// MessageBox.Show("Match Found : " + file);
}
else
{
MessageBox.Show("No files found");
}
}
它不起作用。当我触发它时,只显示消息框。帮助
您可以使用适当的API让框架过滤目录。
var pattern = "*" + txtNameSubstring.Text + "*";
var directories = System.IO.Directory.GetDirectories("C:''Temp", pattern);
因为MessageBox
将出现在第一个不包含子字符串的路径上
您可以使用Linq
来获取文件夹,但您需要使用GetDirectories
而不是GetFiles
string name = txtNameSubstring.Text;
var allFiles = System.IO.Directory.GetDirectories("C:''Temp").Where(x => x.Contains(name));//
if (!allFiles.Any())
{
MessageBox.Show("No files found");
}
cblFolderSelect.Items.AddRange(allFiles);
您不希望在循环中包含消息框。
string name = txtNameSubstring.Text;
string[] allFiles = System.IO.Directory.GetFiles("C:''Temp");//Change path to yours
foreach (string file in allFiles)
{
if (file.Contains(name))
{
cblFolderSelect.Items.Add(file);
// MessageBox.Show("Match Found : " + file);
}
}
if(cblFolderSelect.Items.Count==0)
{
MessageBox.Show("No files found");
}
(假设cblFolderSelect
在此代码运行之前为空)
正如您目前所拥有的,您正在决定是否为您检查的每个文件显示的消息框。因此,如果第一个文件不匹配,即使下一个文件可能匹配,您也会被告知"找不到文件"。
(我还更改了Add
,添加了匹配的单个文件,而不是所有文件(一个或多个匹配的文件)