如何在不输入文件扩展名的情况下搜索特定文件名?例如文件名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);
}
}
答案 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();