在asp.net中没有扩展名的搜索文件

时间:2014-09-18 03:52:40

标签: c# asp.net onclick

如何在不输入文件扩展名的情况下搜索特定文件名?例如文件名penguin-family.png,在文本框中输入penguin only,然后列表框将填充包含penguin这样的文件。

的.aspx

<asp:TextBox ID="TextBox1" runat="server">

</asp:TextBox><asp:Button ID="Button1"runat="server" Text="Search" OnClick="Button1_Click" />
<asp:ListBox ID="ListBox1" runat="server" Width="200px" Height="300px"></asp:ListBox>

.aspx.cs

protected void Button1_Click(object sender, EventArgs e)
    {
        ListBox1.Items.Clear();
        DirectoryInfo folder = new DirectoryInfo(Server.MapPath("~/files"));
        foreach (FileInfo files in folder.GetFiles(TextBox1.Text, SearchOption.AllDirectories))
        {
            ListBox1.Items.Add(files.Name);

        }
    }

2 个答案:

答案 0 :(得分:2)

protected void Button1_Click(object sender, EventArgs e)
{
       ListBox1.Items.Clear();
       string[] files = Directory.GetFiles(Server.MapPath("~/files"));

       foreach (string item in files)
       {
           string fileName = Path.GetFileName(item);
           if (fileName.ToLower().Contains(TextBox1.Text.ToLower()))
           {
               ListBox1.Items.Add(fileName);
           }

       }
}

答案 1 :(得分:0)

你可以这样做。

protected void Button1_Click(object sender, EventArgs e)
{
     string[] files = Directory.GetFiles(Server.MapPath("~/files"))
                   .Where(file => file.ToLower().Contains(TextBox1.Text.ToLower().Trim()))
                   .ToArray();

     foreach (string item in files)
     {
        ListBox1.Items.Add(fileName);
     }

}

好吧,您可以使用Dictionary<string, string>对其进行更优化,并直接绑定到列表框。像这样 -

var files = Directory.GetFiles(Server.MapPath("~/files"))
           .Where(file => file.ToLower().Contains(TextBox1.Text.ToLower().Trim()))
           .ToList();

Dictionary<string, string> fileList = files
           .Zip(files, (listText, listValue) => new { listText, listValue})
           .ToDictionary(x => x.listValue, x => x.listText);
ListBox1.DataSource = fileList;
ListBox1.DataTextField = "listValue";
ListBox1.DataValueField = "listText";
ListBox1.DataBind();

如果您使用的是.Net framework 4.5,则可以使用Directory.EnumerateFiles

var files = Directory
    .EnumerateFiles(Server.MapPath("~/files"))
    .Where(file => file.ToLower().Contains(TextBox1.Text.ToLower().Trim()))
    .ToArray();