소리처럼 들리지는 않습니다. 거기에있는 문자를 기반으로 임의의 위치로 임의로 점프 할 수 없으므로 교체 할 줄을 찾을 때까지 읽어야하므로 루프가됩니다. 당신이 루프없이 그것을 할 수있는 유일한 방법은 라인이 같은 길이라면 "나는 라인 번호 x"이라고 말하고 따라서 x * [line length]
을 찾고자 할 것입니다. 그래서 간단하지만 상대적으로 제한된 설정입니다.
즉, 단 한 줄만 바꾸는 경우 어쨌든 줄의 길이를 걱정해야 할 것입니다. 스트림에 "삽입"할 수는 없지만 시작 위치 만 선택하고 이어지는 바이트를 쓸 수 있습니다. 따라서 길이가 40자인 행을 길이가 60 자 중 하나로 바꾸려고하면 다음 행에 18 (60 - 40 - "\r\n".Length
)자를 쓰는 것이 좋습니다.
그래서 기본적으로 여기에 두 가지 시나리오가 있습니다 :
가
- 상수 라인 길이가 : 스트림을 통해 탐색, 루프 부정이
- 변수 라인 길이 : 당신은 루프,하지만 괜찮아요 왜냐하면 대체 된 라인을 따르는 데이터를 다시 작성해야하기 때문입니다.
대체 문자열이 정확히 원래 길이와 동일한 길이라는 3 번째 시나리오를 가정 해 보겠습니다. 그런 다음 해당 줄로 만 루프해야합니다. 그러나 그것은 실제로 앞서 언급 한 두 가지 집합입니다.
분명히이 기능을 수행하는 데는 (더할 나위없이) 몇 가지 좋은 방법이 있습니다. 최소한 단순한 방법. 그러나 나는 당신이 여기에서 요구하고있는 인상을 갖지 못합니다.
성능면에서 정말로 필사적이며 파일이 어떤 식 으로든 정렬되거나 인덱싱되는 경우, 예를 들어 파일 주위를 탐색하는 간단한 이진 검색을 작성할 수 있습니다. 심지어 큰 파일로만 유용 할지라도 말입니다.
솔직히, 그래도. "실제로 큰 파일을 다루지 않는다면, 나는이 모든 것을 많은 시간을 들여야한다는 사실에 약간 놀랐습니다. 그리고 만약 그렇다면, 허용 할 수있는 방식으로 애플리케이션을 설계 할 가치가있을 것입니다. IO는 본질적으로 값 비싸기 때문에 때로는 원하는만큼 최적화하기가 어렵 기 때문에 진행 상황 표시 줄이나 이에 상응하는 도구를 사용하여 사용자에게 어떤 일이 일어나고 있음을 보여줄 수 있습니다.
당신은 당신이 당신의 예에서 선을 발견 한 후 반복 중지 할 의미, 또는 일반적으로 전혀 루프가 없습니다 :
은 자세한 내용은 다음 설명을 참조하십시오? – AssaultingCuccos
C# 4.0을 사용하는 경우 다음과 같은 몇 가지 사항을 고려해야합니다. http://stackoverflow.com/questions/1262965/how-do-read-a-specified-line-in-a-text-file –
사전을 사용하여 글을 쓰는 방법을 모르겠습니다. 파일에. 나는 특정 줄에 파일을 쓰고 싶다. 나는 편집하고 싶은 줄을 이미 알고있다. 반면에 나는 이미 당신이 제안한 글을 읽었고, 문제는이 글이 글을 쓰지 않는 방법에 관한 것이다. –