【问题标题】:Read file from listbox从列表框中读取文件
【发布时间】:2012-07-24 17:27:19
【问题描述】:

我有一些代码可以根据用户选择的目录将完整的文件名(例如 F:\logs\1234.log)加载到列表框中。当用户选择一个或多个文件并单击输出按钮时,我希望代码通读每个选定的文件。之前,我使用的是组合框和代码:

StreamReader sr = new StreamReader(comboBox1.Text);

这显然不适用于列表框。让程序从列表框中读取用户选择的文件的最简单方法是什么?

【问题讨论】:

  • 如果他们只选择一个文件,那么使用 Listbox 有什么意义?
  • 我希望用户能够选择多个文件。这就是我从使用组合框切换到列表框的原因。
  • 那么,您想知道如何获取值来创建多个流阅读器吗?我只是想在回答之前澄清一下。
  • 是的。我本质上希望程序能够读取用户选择了多少文件。

标签: c# winforms listbox


【解决方案1】:

要访问 ListBox 中的所有选定项,您可以使用 SelectedItems 属性:

foreach (string value in listBox1.SelectedItems)
{
    StreamReader sr = new StreamReader(value);
    ...
}

【讨论】:

    【解决方案2】:

    如果您选择每次打开一个文件,则解决方案如下:

    string[] files = Directory.GetFiles(@"C:\");
    listBox1.Items.Clear();
    listBox1.Items.AddRange(files);
    

    然后,进入选择的文件路径:

    if (listBox1.SelectedIndex >= 0)
    { // if there is no selectedIndex, property listBox1.SelectedIndex == -1
           string file = files[listBox1.SelectedIndex];
           FileStream fs = new FileStream(file, FileMode.Open);
           // ..
    }
    

    【讨论】:

      【解决方案3】:

      你可以做什么来创建一个通用列表,它将保存所选文件中的所有文本:

          void GetTextFromSelectedFiles()
          {
              List<string> selectedFilesContent = new List<string>();
              for (int i = 0; i < listBox1.SelectedItems.Count; i++)
              {
                  selectedFilesContent.Add(ReadFileContent(listBox1.SelectedItems.ToString()));
              }
      
              //when the loop is done, the list<T> holds all the text from selected files!
          }
      
          private string ReadFileContent(string path)
          {
              return File.ReadAllText(path);
          }
      

      我认为在您的示例中,当您明确表示“尽可能简单”来读取文件时,最好使用 File.ReadAllText() 方法,而不是使用 StreamReader 类。 p>

      【讨论】:

        【解决方案4】:

        您的原始问题应该更清楚......但如果您需要阅读所有文件:

                var items = listBox.SelectedItems;
                foreach (var item in items)
                {
                    string fileName = listBox.GetItemText(item);
                    string fileContents = System.IO.File.ReadAllText(fileName);
                    //Do something with the file contents
                }
        

        【讨论】:

          猜你喜欢
          • 2021-02-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-14
          • 2020-09-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多