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

时间:2018-05-27 18:24:32

标签: c# .net winforms openfiledialog

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

我试过这样:

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

然而,这不起作用,我不确定我是否在正确的轨道上。

3 个答案:

答案 0 :(得分:3)

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

    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);
    }

答案 1 :(得分:1)

要使用记事本打开文件,您需要将文件名作为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);
    }
}

答案 2 :(得分:0)

您目前正在做的是使用参数Process启动openFileDialog1.ToString(),在流程上调用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语句会自动为您执行此操作。