【问题标题】:How to use openfiledialog to open any file as text in C#?如何使用 openfiledialog 在 C# 中以文本形式打开任何文件?
【发布时间】:2018-05-27 18:24:31
【问题描述】:

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

我试过这样:

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

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

【问题讨论】:

  • 嗯?您在寻找System.IO.File.ReadAllText(pathAndFilename) 吗? - 顺便提一句。如果它不是文本文件或类似文本的文件(例如 XML),“将其作为文本打开”可能会让您胡言乱语。
  • 您希望 Process.Start("notepad.exe" 返回文本?您只能将其作为文本打开,因为它是文本。

标签: c# .net winforms openfiledialog


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您目前正在做的是使用参数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 语句会自动为您执行此操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-26
        • 2023-03-24
        • 2017-10-19
        相关资源
        最近更新 更多