2014-09-18 2 views
1

Как я могу найти конкретное имя файла без ввода его расширения? Например, filename penguin-family.png и в текстовом поле я набрал penguin only, тогда он будет в списке будет заполнять файлы, содержащие penguin что-то вроде этого.Поиск файла без расширения в asp.net

.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); 
      } 

     } 
} 
+0

Что делать, если его внутри подпапки? – NatsuDragneel

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> и связываться непосредственно с ListBox. как это -

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 4.5, то вы можете использовать Directory.EnumerateFiles.

var files = Directory 
    .EnumerateFiles(Server.MapPath("~/files")) 
    .Where(file => file.ToLower().Contains(TextBox1.Text.ToLower().Trim())) 
    .ToArray(); 
Смежные вопросы