4

我有一个 RichTextBox,我想将文本保存到文件中。RichTextBox 的每一行都以 CR+LF ("\n\r") 结尾,但是当我将其保存到文件时,这些行最后只包含 LF 字符。

如果我将内容复制到剪贴板而不是文件,一切正常(剪贴板的内容在每一行的末尾都有 CR+LF,当我粘贴到 Notepad++ 时我可以看到它)。txtClass 是 RichTextBox。

private void btnToClipboard_Click(object sender, EventArgs e) { //按需要工作 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();
    }

}

此时,我也尝试了

SW.NewLine = "\r\n";
SW.Newline = Environment.NewLine

并带有所有 Enconding avalilables。

如果我使用 SW.Write("Line One\r\nLineTwo\r\nLineThree") 也可以正常工作。

谢谢你的帮助

4

3 回答 3

3

感谢 Peter Lindholm,他在评论中给了我正确的答案。

您是否尝试过位于 RichTextBox 本身的 SaveFile 方法? http://msdn.microsoft.com/en-us/library/system.windows.forms.richtextbox.savefile(VS.71).aspx

于 2009-07-20T15:22:35.263 回答
1

我有同样的问题 - 但不想保存为 RichTextBox - 只是一个标准的简单 txt 文件,可以在记事本中轻松读取和编辑。

问题是由于某种原因 StreamWriter 类不会将 \n 写入文件(仍然不确定为什么 - 你会认为它会):)

因此,一个简单的解决方案是将 \n 手动替换为 \r\n 并按预期完美运行。

请参阅下面的代码片段:

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);
    }
于 2014-03-01T18:21:13.560 回答
0
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();
    }
}
于 2010-01-16T07:36:33.663 回答