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

Foi útil?

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();
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top