目录仅显示文件名

时间:2015-11-24 06:33:12

标签: c#

我每次单击按钮时,只是逐个显示文本块中文件夹的文件名。但它直接从目录中提供了最后一个文件名。请提出任何建议。

C#

private void Button_Click(object sender, RoutedEventArgs e)
{
    int i = 0;
    string[] allFiles = Directory.GetFiles(Folder);
    string startWithThis = text.Text.ToUpper();
    string files = "";
    lstFiles = new List<string>();
    foreach (string s in allFiles)
    {
        string file = s.Replace(Folder, string.Empty);
        if (file.ToUpper().StartsWith(startWithThis))
        {
            lstFiles.Add(file);
            text.Text = lstFiles.ElementAt(i);
            i++;
        }

     }
}

3 个答案:

答案 0 :(得分:2)

此行导致问题 -

text.Text = lstFiles.ElementAt(i);

您实际上是用当前文件名替换文本框的所有内容

将其替换为 -

text.Text = text.Text + lstFiles.ElementAt(i);

或者,如果您需要新行中的每个文件名 -

text.Text = text.Text + Environment.NewLine + lstFiles.ElementAt(i);

这将单击显示所有文件。 现在如果你需要在每次点击时只显示一个文件名,你可以将List<string>作为公共变量保存在文件夹中的所有文件列表中,然后在每次点击时将文本框添加到下一个文本框中此列表中的项目

答案 1 :(得分:1)

List<string> dirs = new List<string>(Directory.EnumerateDirectories(path));
foreach (var dir in dirs)
{
    comboBox1.Items.Add(dir.Substring(dir.LastIndexOf("\\") + 1));
}

我现在使用这段代码来填充带有目录名的组合框。如果用文本块名称替换comboBox1,它应该可以工作。

答案 2 :(得分:1)

你应该合并而不是重写这些名字;一个简单的修正案

  text.Text += ", " + lstFiles.ElementAt(i);

更好的方法是使用 Linq

  var files = Directory
    .EnumerateFiles(Folder)
    .Select(file => Path.GetFileName(file))
    .Where(name => name.StartsWith(startWithThis, StringComparison.OrdinalIgnoreCase));

  text.Text = String.Join(", ", files);

  myComboBox.Items.AddRange(files.ToArray());