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

它不起作用。当我触发它时,只显示消息框。帮助

从C#中的C:Temp目录中获取包含特定SUBSTRING的FOLDER的名称

您可以使用适当的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,添加了匹配的单个文件,而不是所有文件(一个或多个匹配的文件)