如何使用 openfiledialog 在 C# 中以文本形式打开任何文件?

How to use openfiledialog to open any file as text in C#?

我正在用 C# 编写一个使用 openfiledialog 的 winforms 程序。我希望它能够获取用户选择的文件并将其作为文本打开,而不管文件类型如何。

我这样试过:

if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
    textBox1.Text = Process.Start("notepad.exe", openFileDialog1.ToString()).ToString();
}

然而,这没有用,我不确定我是否走在正确的轨道上。

要使用记事本打开文件,您需要将文件名作为Start 方法的第二个参数传递。例如:

using (var ofd = new OpenFileDialog())
{
    if(ofd.ShowDialog()== DialogResult.OK)
    {
        System.Diagnostics.Process.Start("notepad.exe", ofd.FileName);
    }
}

此外,如果出于某种原因知道并非所有文件内容都是文本,您将自己阅读文件内容:

using (var ofd = new OpenFileDialog())
{
    if(ofd.ShowDialog()== DialogResult.OK)
    {
        var txt = System.IO.File.ReadAllText(ofd.FileName);
    }
}

您现在正在做的是使用参数 openFileDialog1.ToString() 启动 Process,在进程中调用 ToString() 并将其设置为 TextBox 中的文本。如果路径有效,结果可能类似于 "System.Diagnostics.Process"。但是由于您使用 openFileDialog1.ToString() 作为路径,您的应用程序可能会因找不到文件错误而崩溃。

要获取 OpenFileDialog 的选定文件,请使用 openFileDialog1.FileName。 (参见文档 here

我认为您真正想要做的是从文件中读取并将其内容作为文本写入 TextBox。为此,您需要一个 StreamReader,例如:

if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
    using(var reader = new StreamReader(openFileDialog1.FileName))
    {
        textBox1.Text = reader.ReadToEnd();
    }
}

这样,您就可以使用 StreamReader 打开文件,读取其内容,然后将它们分配给文本框。

using 语句之所以存在,是因为 StreamReader 需要在您使用完它后进行处理,以便该文件不再使用并释放所有资源。 using 语句会自动为您执行此操作。

您应该使用此代码:
首先添加这个命名空间:

    using System.IO;

然后将此代码添加到您的函数中:

    OpenFileDialog openFileDialog = new OpenFileDialog();
    openFileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
    if (openFileDialog.ShowDialog()== DialogResult.OK)
    {
            textBox1.Text = File.ReadAllText(openFileDialog.FileName);
    }