Enregistrer du texte de zone de texte enrichi avec C#

Cette question a été répondue. J'ai amélioré un peu le code (du moins je le pense). Il rappelle maintenant de la aceepted réponse à la question Ouvrir le fichier dans la zone de texte enrichi avec C#. Si je n'ai pas fait d'erreur (que j'ai peut-être), le code devrait enregistrer un fichier avec le texte de la zone de texte enrichi rtfMain. L'extension de fichier par défaut est .txt. Vous pouvez également utiliser l'extension de fichier .rtf.

private void menuFileSave_Click(object sender, EventArgs e) 
{ 
//Create a new SaveFileDialog object 
using (SaveFileDialog dlgSave = new SaveFileDialog())
  try
  {
    //Default file extension
    dlgSave.DefaultExt = "txt"; 
    //SaveFileDialog title
    dlgSave.Title = "Save File As";
    //Available file extensions
    dlgSave.Filter = "Text Files (*.txt)|*.txt|RTF Files (*.rtf)|*.rtf"; 
    //Show SaveFileDialog box and save file
    if (dlgSave.ShowDialog() == DialogResult.OK) 
    { 
      //Save as .txt file
      if (Path.GetExtension(dlgSave.FileName) == ".txt")
      {
        rtfMain.SaveFile(dlgSave.FileName, RichTextBoxStreamType.PlainText);
      }
      //Save as .rtf file
      if (Path.GetExtension(dlgSave.FileName) == ".rtf")
      {
        rtfMain.SaveFile(dlgSave.FileName, RichTextBoxStreamType.PlainText);
      }
    }
    catch (Exception errorMsg)
    {
      MessageBox.Show(errorMsg.Message);
    }
  }
}
private void rtfMain_TextChanged(object sender, EventArgs e)
{
}

Mise à jour: j'ai amélioré le code encore plus loin (du moins je le pense). La principale différence est que, maintenant, vous avez plus de contrôle sur l'encodage du fichier. C'est le code que j'utilise actuellement:

private void fileSave_Click(object sender, EventArgs e)
{
  //Text from the rich textbox rtfMain
  string str = rtfMain.Text;
  //Create a new SaveFileDialog object
  using (SaveFileDialog dlgSave = new SaveFileDialog())
  try
  {
    //Available file extensions
    dlgSave.Filter = "All Files (*.*)|*.*";
    //SaveFileDialog title
    dlgSave.Title = "Save";
    //Show SaveFileDialog
    if (dlgSave.ShowDialog() == DialogResult.OK && dlgSave.FileName.Length > 0)
    {
      //Save file as utf8 without byte order mark (BOM)
      //ref: http://msdn.microsoft.com/en-us/library/s064f8w2.aspx
      UTF8Encoding utf8 = new UTF8Encoding();
      StreamWriter sw = new StreamWriter(dlgSave.FileName, false, utf8);
      sw.Write(str);
      sw.Close();
    }
  }
  catch (Exception errorMsg)
  {
    MessageBox.Show(errorMsg.Message);
  } 
}
  • Vous devez utiliser le using déclaration.
  • Selon msdn.microsoft.com/en-us/library/yh598w02(SV.80).aspx, "il est généralement préférable de libérer des ressources limitées comme les handles de fichiers et les connexions de réseau aussi rapidement que possible" et de "l'instruction à l'aide permet au programmeur de spécifier lorsque les objets qui utilisent les ressources doivent les libérer". Est-ce la raison principale pour l'utilisation de l'instruction à l'aide?
  • Yup, c'est vieux, mais votre code m'a aidé