2011-08-04 3 views
5

Im 스트림으로 파일을 읽는 중 : Stream fin = File.OpenRead(FilePath); 파일 스트림에서 캐리지 리턴을 찾아서 제거하는 방법이 있습니까?스트림에서 여분의 캐리지 리턴을 제거하십시오.

편집 : 목표는 단일 캐리지 리턴을 제거하고 \r을 반환하고 캐리지 리턴을 그대로 두어 새 줄 "\r\n"을 그대로 유지합니다.

예제 파일 :

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 

EDIT2 :

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 

그리고 그 결과는 같아야 같은 모습을하고있다 어떤 최종 해결책 :

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; 
    } 

내가 취할를 StreamStreamReader을 사용하여 문자열로 읽은 다음 e를 제거하십시오. xtra carriage-return을 입력하고 Stream에 다시 씁니다. 코드가 정상적으로 보이 나 다르게해야합니까?

+0

잘 보인다. 작은 파일을위한 좋은 솔루션. –

답변

2

샘플 텍스트를 검토 한 결과, 다음은 하나의 'R'인스턴스를 제거합니다 : 당신은 아마 API의 깔끔함 방법 내에서 제로로 반환 스트림의 위치를 ​​설정해야하지만

string text = File.ReadAllText(FilePath); 

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

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

감사합니다. 작동합니다! – hs2d

+1

이것은 문제가 아니지만 문자열''\ r \ r \ r " '이 주어지면 결과는 여전히" "\ r \ r"'이됩니다. 교체 할 때까지 동일한 문자열을 다시 얻을 때까지 반복해서 교체해야합니다. – aL3891

+0

@ aL3891 동의했다. 그러나 샘플 텍스트에서 이것은 발생하지 않을 것이다. –

0

Replace Line Breaks in a String C#

는 위의 답을 가지고있다. 파일을 문자열로 읽어 들인 다음 줄 바꿈을 제거 할 수 있습니다.

+0

그는 스트림에서 직접 제거하려고한다고 생각하지만 그래도 스트림으로 읽은 후에는 제거하는 것이 좋습니다. – Jethro

+0

예, 파일을 문자열로 읽는 것이 마지막 옵션입니다. 스트림에서 올바르게 수행 할 수있는 방법이 있는지 알고 싶었습니다. – hs2d

2

방법에 대해 :

string final = string.Join("", File.ReadLines(path)); 

? 이 명령은 줄 단위로 읽은 다음 구분 기호없이 다시 결합합니다.

관련 문제