Открыть файл в текстовом поле с помощью C # - PullRequest
5 голосов
/ 19 сентября 2010

На этот вопрос ответили. Я рекомендую решение sumit_programmers ниже. На данный момент я удалил свой код, думая, что он скорее запутанный, чем полезный. Когда я разработаю его немного дальше, возможно, я опубликую свой код здесь с некоторыми комментариями.

Вам также может быть интересен ответ на вопрос Сохранить текст из расширенного текстового поля с помощью C # . Существует ответ, который напоминает о принятом ответе на этот вопрос. Код должен работать, но он написан мной, поэтому могут быть некоторые ошибки или отсутствующая информация.


Обновление: я немного улучшил код (по крайней мере, мне так кажется). «Encoding.Default», кажется, работает с наиболее распространенными кодировками, такими как ANSI. Если кодировка UTF-8 без метки порядка байтов (BOM), похоже, что Encoding.Default не работает. Для получения дополнительной информации перейдите на informit.com / guides . Вот код, который я сейчас использую:

private void fileOpen_Click(object sender, EventArgs e)
{
  using (OpenFileDialog dlgOpen = new OpenFileDialog())
  {
    try
    {
      // Available file extensions
      dlgOpen.Filter = "All files(*.*)|*.*";
      // Initial directory
      dlgOpen.InitialDirectory = "D:";
      // OpenFileDialog title
      dlgOpen.Title = "Open";
      // Show OpenFileDialog box
      if (dlgOpen.ShowDialog() == DialogResult.OK)
      {
        // Create new StreamReader
        StreamReader sr = new StreamReader(dlgOpen.FileName, Encoding.Default);
        // Get all text from the file
        string str = sr.ReadToEnd();
        // Close the StreamReader
        sr.Close();
        // Show the text in the rich textbox rtbMain
        rtbMain.Text = str;
      }
    }
    catch (Exception errorMsg)
    {
      MessageBox.Show(errorMsg.Message);
    }
  }
}

Ответы [ 3 ]

15 голосов
/ 19 сентября 2010

Да, вы получаете эту ошибку, когда пытаетесь получить доступ к файлу, который не может быть загружен в Rich Text Box. Если вы хотите загрузить файл .rtf, вам нужно добавить эту строку

richTextBox1.LoadFile(dlg.FileName, RichTextBoxStreamType.RichText);

и если вы хотите загрузить .txt файл, вам нужно добавить это

richTextBox1.LoadFile(dlg.FileName, RichTextBoxStreamType.PlainText);

Пример кода:

 using (OpenFileDialog ofd = new OpenFileDialog())
        {
            try
            {
                ofd.Filter = "Text files (*.txt)|*.txt|RTF files (*.rtf)|*.rtf";
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    if (Path.GetExtension(ofd.FileName) == ".rtf")
                    {
                        richTextBox1.LoadFile(ofd.FileName, RichTextBoxStreamType.RichText);
                    }
                    if (Path.GetExtension(ofd.FileName) == ".txt")
                    {
                        richTextBox1.LoadFile(ofd.FileName, RichTextBoxStreamType.PlainText);
                    }

                }
            }
            catch (Exception ex)
            {
            }
        }
4 голосов
/ 19 сентября 2010

Редактировать: Хорошо, если вы хотите открыть простой текстовый файл, вернитесь к моему исходному решению.

Вы можете просто изменить MessageBox.Show на строку:

rtfMain.Text = File.ReadAllText(dlg.FileName);

Для получения дополнительной информации см. Документацию по ReadAllText.

Бит try / catch состоит в том, чтобы избежать сбоя приложения из-за необработанных ошибок (иногда лучше всего просто дать ему упасть, но дажетогда вы обычно хотите закрыть это в некоторой контролируемой манере).Особенно при работе с файлами существует высокий риск того, что по какой-то причине они не загрузятся, поэтому может быть полезно окружить код некоторой обработкой ошибок, например, например, так:

try
{
    rtfMain.Text = File.ReadAllText(dlg.FileName);
}
catch(Exception ex) // should try to avoid catching generic Exception here and use a more specialized one
{
     MessageBox.Show("Failed to open file. Error: " + ex.Message);
}

Старый ответ ниже

Редактировать: я забыл, что это RichTextBox, поэтому мой первый ответ не был подходящим, поэтому лучше сделать это вместо этого:

Вы могли быпросто замените MessageBox.Show на строку:

rtfMain.LoadFile(dlg.FileName);

Возможно добавление подходящего try / catch для обработки любых ошибок при чтении файла.

См. документацию для RichTextBox.LoadFile для полного образца.

2 голосов
/ 19 сентября 2010
try
{
 openFileDialog fd=new openFileDialog();
 fd.showDialog();
 richTextbox1.LoadFile(fd.FileName);
}
catch(Exception exc)
{
 MessageBox.Show(exc.Message);
}
...