流读取选定的列表框项查询

时间:2014-12-04 04:02:29

标签: c# listbox

我有一个应用程序读取目录,获取文件列表(segy)并使用文件名填充应用程序左侧的列表框。单击listox中的项目后,我想要右侧的富文本框来显示文件的内容。

如果我使用openfiledialog选择目录中的一个文件,我有应用程序工作,我在尝试让流阅读器读取我点击的所选文件时遇到问题。

下面的工作简单的openfiledialog代码。

openFileDialog1.Filter = "All Files|*.*";
openFileDialog1.Title = "Open SEG-Y Files";
DialogResult result = openFileDialog1.ShowDialog();
StreamReader readFile = new StreamReader(openFileDialog1.FileName, ebcdic);
readFile.BaseStream.Seek(0, SeekOrigin.Begin);
readFile.Read(data, 0, 3200);
string stringData = "";
for (int i = 0; i < data.Length; i++)
{
    if ((i % 80) == 0 && stringData != "")
        stringData += Environment.NewLine;
        stringData += data[i].ToString();
}
rtbHeader.Text = stringData;
rtb.AppendText(value);
rtb.AppendText(System.Environment.NewLine);

我的代码

private void txtUpdate(string value)
    {
        lstFiles.Items.Add(value + Environment.NewLine);
        lstFiles.TopIndex = lstFiles.Items.Count - 1;
        lstFiles.Update();
    }

    private void btnFolder_Click(object sender, EventArgs e)
    {
        txtPath.Text = "";
        lstFiles.Items.Clear();
        rtbHeader.Clear();
        DialogResult result = folderBrowserDialog1.ShowDialog();

        if (result == DialogResult.OK)
        {
            txtPath.Text = folderBrowserDialog1.SelectedPath;
        }
    }

    private void btnFiles_Click(object sender, EventArgs e)
    {
        lstFiles.Items.Clear();
        string path = txtPath.Text;
        List<string> files = new List<string>(Directory.EnumerateFiles(txtPath.Text, "*.sgy", SearchOption.AllDirectories).Select(Path.GetFileName).OrderBy(x => x));
        if (files == null || files.All(x => string.IsNullOrWhiteSpace(x)))
        {
            MessageBox.Show("There are no files with extension" + " sgy", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            return;
        }

        foreach (string file in files)
        {
            this.Invoke(new Action(() => txtUpdate(file)));
        }   
    }

    private void lstFiles_MouseClick(object sender, MouseEventArgs e)
    {
        rtbHeader.Clear();
        String item = (Convert.ToString(lstFiles.SelectedItem));
        //MessageBox.Show(item);
        StreamReader readFile = new StreamReader(item, ebcdic);
        readFile.BaseStream.Seek(0, SeekOrigin.Begin);
        readFile.Read(data, 0, 3200);
        string stringData = "";

        for (int i = 0; i < data.Length; i++)
        {
            if ((i % 80) == 0 && stringData != "")
                stringData += Environment.NewLine;
            stringData += data[i].ToString();
        }
        rtbHeader.Text = stringData;
    }
}

我在这个位上遇到路径异常中的非法字符。

StreamReader readFile = new StreamReader(item, ebcdic);

由于

1 个答案:

答案 0 :(得分:0)

代码示例真的应该更简单。更简单。并且问题描述更具体。更具体。请参阅https://stackoverflow.com/help/mcvehttps://stackoverflow.com/help/how-to-ask

那就是说,我相信如果你在txtUpdate()方法中改变这个陈述:

lstFiles.Items.Add(value + Environment.NewLine);

到此:

lstFiles.Items.Add(value);

它会起作用。异常很可能是因为您的字符串中有换行符。这不仅使文件名不是您想要的文件名,而且它不是Windows路径中的有效字符。

另请注意,您添加的ListBox中的项目已经是string。您不需要在其上拨打Convert.ToString()。您可以将它们转回string

String item = (string)lstFiles.SelectedItem;