파일 크기가 수백만 줄에 달하기 때문에 파일에서 손상된 행을 확인하고 제거해야합니다.대용량 텍스트 파일 읽기 및 수정 3-3GB
나는 뻔뻔하게 File.ReadAllLines
을 시도했지만 작동하지 않았습니다. 그런 다음 원본 파일에서 아래의 내용을 읽고 새 파일에 쓰는 것처럼 줄을 흘려 보려고했습니다. 그것이 일을하는 동안, 그것은 몇 시간 (5+)에 그렇게한다. 나는 유일한 옵션처럼 들리는 버퍼를 사용하는 방법에 대해 읽었지만 어떻게 그런 식으로 라인 무결성을 유지할 것인가?
솔루션 : StreamWriter가 외부로 이동했습니다. split 대신 count가 사용됩니다.
using (FileStream inputStream = File.OpenRead((localFileToProcess + ".txt")))
{
using (StreamReader inputReader = new StreamReader(inputStream, System.Text.Encoding.GetEncoding(1254)))
{
using(StreamWriter writer=new StreamWriter(localFileToProcess,true,System.Text.Encoding.GetEncoding(1254)))
{
while (!inputReader.EndOfStream)
{
if ((tempLineValue = inputReader.ReadLine()).Count(c => c == ';') == 4)
{
writer.WriteLine(tempLineValue);
}
else
incrementCounter();
}
}
}
}
Split (';')은 배열을 할당하고 각 줄마다 메모리에 5 개의 문자열을 만듭니다. 이것은 가비지 컬렉터에 대한 작업을 추가합니다. 어쩌면 선에 4 개의 세미콜론이 있는지 확인해야할까요? 또한 각 반복은 StreamWriter를 생성/삭제합니다. 처음에 하나를 만들어 운영 종료시 폐기하는 것이 더 좋지 않습니까? – Artemix
좋은 지적. 나는 변화를 만들거야. – mechanicum
문자열 작성기로 배치를 읽고 프로세스를 작성한 다음 한 번에 작성하는 방법은 무엇입니까? – bhs