C#从流中删除额外的回车换行符

5
我将以流的方式读取文件:Stream fin = File.OpenRead(FilePath);您有没有办法找到并从该文件流中删除所有回车符?
编辑:目标是删除单个回车符\ r,并保留与换行符"\r\n"一起的回车符。
示例文件:
The key backed up in this file is:\r
\r\n
pub   2048R/65079BB4 2011-08-01\r
\r\n
      Key fingerprint = 2342334234\r
\r\n
uid                  test\r
\r\n
sub   2048R/0B917D1C 2011-08-01\r

最终结果应该如下所示:

The key backed up in this file is:
\r\n
pub   2048R/65079BB4 2011-08-01
\r\n
      Key fingerprint = 2342334234
\r\n
uid                  test
\r\n
sub   2048R/0B917D1C 2011-08-01

编辑2:最终解决方案如下:

    static private Stream RemoveExtraCarriageReturns(Stream streamIn)
    {
        StreamReader reader = new StreamReader(streamIn);
        string key = reader.ReadToEnd();
        string final = key.Replace("\r\r", "\r");
        byte[] array = Encoding.ASCII.GetBytes(final);
        MemoryStream stream = new MemoryStream(array);
        return stream;
    }

我使用StreamReaderStream读入字符串中,然后去除多余的回车符并将其重新写入Stream。您认为我的代码是否正确?或者我需要做一些不同的事情吗?


看起来不错,尽管为了API的整洁性,你可能应该在方法中将返回流的位置设置为零。对于小文件来说是一个好的解决方案。 - Tim Lloyd
3个回答

2
如何呢:
string final = string.Join("", File.ReadLines(path));

? 这个函数会逐行读取,然后将其重新组合在一起,没有任何分隔符。


2

在查看您的样本文本后,以下内容将删除单个的 'r' 实例:

string text = File.ReadAllText(FilePath);

text = text.Replace("\r\r", "\r");

File.WriteAllText(FilePath + ".modified", text);

1
这可能不是一个问题,但如果给定字符串 "\r\r\r",结果仍然是 "\r\r"。你必须一遍又一遍地进行替换,直到得到与替换前相同的字符串。 - aL3891
@aL3891 同意,但从示例文本来看,这种情况不会发生。 - Tim Lloyd

0

我认为他想直接从流中删除它们,但是最好的方法是在读入流后一次性删除它们。 - Jethro
是的,将文件读入字符串是我的最后选择。只是想知道是否有一种在流中正确执行此操作的方式。 - hs2d

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接