기존 질문이 내 것과 일치하는지 확인했지만 내 실수가 있으면 본 적이 없었습니다.효율적인 방법으로 텍스트 파일을 동시에 비교
서로 비교할 두 개의 텍스트 파일이 있습니다. 하나는 임시 로그 파일이고 다른 하나는 임시 로그의 모든 내용을 수집하여 하나의 파일에 추가하는 영구 로그입니다 (로그를 마지막으로 검사하고 전체 로그의 끝에 새 줄을 추가 한 이후로 로그에 새 줄을 수집합니다.) 그러나 지점 이후 이것은 전체 로그가 상당히 커지도록 유도 할 수 있습니다. 따라서 이와 비교하여 효율적이지 않으므로이 방법에 대해 여러 가지 방법을 고려해 왔습니다.
List<String> bufferedlines = new List<string>();
using (StreamReader ArchiveStream = new StreamReader(ArchivePath))
{
if (bufferedlines.Contains(ArchiveStream.ReadLine()))
{
}
}
:
내 첫번째 생각은 뭔가를 목록으로 문자열 (은 일반적으로 두 가지의 작은 될 것 인) 및 아카이브 로그를 통해 단순히 루프 임시 로그를 "버퍼"를하는 것입니다
이제 내가 여기에서 진행할 수있는 몇 가지 방법이 있습니다. 불일치를 저장하는 또 다른 목록을 만들 수 있고, 읽기 스트림을 닫을 수 있습니다 (나는 동시에 읽고 쓸 수 있다고 확신하지 못합니다. 내 옵션에 대한 일을 더 쉽게 할 수 있습니다). 그런 다음 추가 모드에서 쓰기 스트림을 열고 파일에 목록을 씁니다. 양자 택일로, 불일치를 버퍼링을 절단, 나는 파일을 비교하는 동안 쓰기 스트림을 열 수있는 현장에서 일치하지 않는 라인을 작성하십시오.
내가 생각할 수있는 다른 방법은 파일을 버퍼링하는 것이 아니라 스트림을 나란히 읽고 스트림을 비교하여 비교하는 것입니다. . 뭔가 같은 :
using (StreamReader ArchiveStream = new StreamReader(ArchivePath))
{
using (StreamReader templogStream = new StreamReader(tempPath))
{
if (!(ArchiveStream.ReadAllLines.Contains(TemplogStream.ReadLine())))
{
//write the line to the file
}
}
}
나는 문제가 해결 것인지 확실하지 않다거나 첫 번째 방법보다 더 효과적 일 수 있음을, 그래서 난 사람이 통찰력이 있다면 내가 어떻게에보고, 물어 거라고 생각 말했듯 제대로 구현되었는지, 그리고 그것이 가장 효율적인 방법인지 아니면 더 나은 방법이 있는지에 대한 정보를 제공합니다.
파일의 순서가 다른 동일한 세트가있는 경우 어떻게됩니까? –
@EdPlunkett 그러면 코드가 정상적으로 작동합니다. 주문은 여기에서 고려하지 않습니다. – Servy
오, 오케이, 죄송합니다. 나는 OP를 면밀히 읽지 않았다. 이제 알겠다. –