【问题标题】:How to read from an existing .txt file without hard coding (winforms)?如何在没有硬编码(winforms)的情况下从现有的 .txt 文件中读取?
【发布时间】:2019-10-22 23:29:56
【问题描述】:

我正在开发一个带有 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);
    }
}

您可以查看screenshot1screenshot2 以了解其工作原理。我想在文本字段中输入路径,但它给了我一个 ArgumentNullException。输入我要导入的路径后,使用按钮查看该表上的数据。 P.s 我不确定检查路径的存在是否可以这样工作。

编辑
在 cmets 之后,我编辑了我的代码,我得到了一些有用的东西。但是,为了导入文件,我必须选择它 2 次,它在表中写入相同的行 twice。我该如何解决?

【问题讨论】:

  • 这不是控制台应用程序; string path = Console.ReadLine(); 无济于事。使用Button.Click 事件,而不是TextBox.TextChanged 事件。您需要 pathSearch.Text 属性值。使用OpenFileDialog 类创建标准打开对话框来选择文件。 File.Exists(path) =&gt; 这个条件将在 OpenFileDialog 中得到验证。但是,如果您自己检查,请在File.ReadAllLines(path); 之前进行,否则它毫无用处。等
  • Console.ReadLine() 从控制台窗口读取输入。您需要改用 TextBox 中的文本。或者更好的是,实现OpenFileDialog
  • 你在TextChanged方法中编辑pathsearchText属性,会再次触发这个事件。

标签: c# winforms path hardcode


【解决方案1】:

问题是您在pathSearch 文本框的TextChanged 事件中执行此操作,并且您正在修改该事件中的文本,因此该事件被触发两次:

// This line of code causes the pathSearch_TextChanged event to fire again
pathSearch.Text = File.ReadAllText(path);

附带说明:您真的是要将文件的内容写入pathSearchText 属性,还是应该只是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...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    相关资源
    最近更新 更多