我有一个应用程序读取目录,获取文件列表(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);
由于
答案 0 :(得分:0)
代码示例真的应该更简单。更简单。并且问题描述更具体。更具体。请参阅https://stackoverflow.com/help/mcve和https://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;