我正在用winforms做一个项目。我想从现有的.txt文件中读取,但没有硬编码。这意味着我想允许用户提供文件的路径作为输入。我尝试了以下代码:
private void pathSearch_TextChanged(object sender, EventArgs e)
{
string path = "";
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
path = ofd.FileName;
pathSearch.Text = File.ReadAllText(path);
}
string[] lines = File.ReadAllLines(path);
if (!File.Exists(path))
{
// Create a file to write to.
string[] createText = { "Hello", "And", "Welcome" };
File.WriteAllLines(path, createText);
}
string[] values;
for (int i = 0; i < lines.Length; i++)
{
values = lines[i].ToString().Split('|');
string[] row = new string[values.Length];
for (int j = 0; j < values.Length; j++)
{
row[j] = values[j].Trim();
}
table.Rows.Add(row);
}
}
您可以检查屏幕截图1和屏幕截图2,以了解其工作原理。我想在文本字段中输入路径,但它给了我一个 ArgumentNullException。输入路径后,我想使用按钮导入以查看该表上的数据。 附言我不确定检查路径是否存在是否以这种方式工作。
编辑
评论后,我编辑了我的代码,我有一些有用的东西。但是,为了导入文件,我必须选择它 2 次,它会在表中写入相同的行两次。我该如何解决这个问题?
问题是您在pathSearch
文本框的TextChanged
事件中执行此操作,并且您正在修改该事件中的文本,因此该事件被触发两次:
// This line of code causes the pathSearch_TextChanged event to fire again
pathSearch.Text = File.ReadAllText(path);
作为旁注:您真的是要将文件的内容写入pathSearch
的Text
属性,还是应该只是FileName
?
最好的解决方案可能是不修改修改内容时触发的事件中的控件内容。通常,OpenFileDialog
是从Button_Click
事件启动的:
// Launch the file browser dialog from the click event of the Import button
private void btnImport_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() != DialogResult.OK) return;
var path = ofd.FileName;
pathSearch.Text = path;
// Code continues...
}