Escrevendo o conteúdo de uma caixa richtext para um arquivo
-
12-09-2019 - |
Pergunta
Eu tenho um RichTextBox e quero salvar o texto em um arquivo. Cada linha do RichTextBox é encerrada com CR+LF (" n r"), mas quando eu o salvo em um arquivo, as linhas contêm apenas o char LF no final.
Se eu copiar o conteúdo para a área de transferência em vez de um arquivo, tudo corre certo (o conteúdo do clipboar possui CR+LF no final de cada linha, posso vê -lo quando colo no bloco de notas ++). TXTClass é o RichTextBox.
private void btntoclipboard_click (remetente de objeto, EventArgs e) {// funciona conforme desejado o clipboard.settext (txtClass.text); }
private void btnToFile_Click(object sender, EventArgs e)
{
//Don't work as desired
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.RestoreDirectory = true;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
System.IO.StreamWriter SW = new System.IO.StreamWriter(saveFileDialog1.FileName, false, Encoding.ASCII);
SW.Write(txtClass.Text);
SW.Close();
}
}
Neste momento, eu também tentei com
SW.NewLine = "\r\n";
SW.Newline = Environment.NewLine
e com todos os Anding Anding Avalilables.
Se eu usar Sw.Write ("Linha um r nlinetwo r nlinethree") também funciona bem.
Obrigado pela ajuda
Solução
Obrigado a Peter Lindholm, que me deu a resposta correta em um comentário.
Você experimentou o método SAVEFILE localizado no próprio RichTextBox? http://msdn.microsoft.com/en-us/library/system.windows.forms.richtextbox.savefile(vs.71).aspx
Outras dicas
Eu tive o mesmo problema - mas não queria salvar como uma caixa richtext - apenas um arquivo txt simples padrão que poderia ser facilmente lido e editado no bloco de notas.
A questão é, por algum motivo, a classe Streamwriter não escreve o n no arquivo (ainda não sei por que - você pensaria que sim) :)
Portanto, uma solução simples é substituir manualmente n por r n e funciona perfeitamente conforme o esperado.
Veja o código Snipit abaixo:
if ((myStream = ScriptFileSaveDB.OpenFile()) != null)
{
using (StreamWriter sr = new StreamWriter(myStream))
{
//Since \n (newlines) are not being written correctly as \r\n
//Go thru Text and replace all "\n" with \r\n
tempStr = ScriptProgramWindowRTB.Text;
tempStr = tempStr.Replace("\n", "\r\n");
sr.Write(tempStr);
}
private void btnToFile_Click(object sender, EventArgs e)
{
//Don't work as desired
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.RestoreDirectory = true;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
System.IO.StreamWriter SW = new System.IO.StreamWriter(
saveFileDialog1.FileName, false, Encoding.ASCII);
SW.Write(txtClass.Text);
SW.Close();
}
}