2010-04-17 4 views
5

나는 항상 실행되는 서비스를 가지고 있으며 로그 파일도 보관하고 있습니다. 기본적으로 몇 초마다 로그 파일에 새로운 행을 추가합니다. 나는이 줄을 읽은 다음 작은 파일을 작성한 후 여러 줄로 파싱합니다. 내가 가진 질문은 어떻게 내가 로그 파일에서 로그 파일의 서비스를 방해하지 않고 로그 파일에서 이미 구문 분석 한 줄을 삭제할 수 있습니까?C 파일을 다시 쓰지 않고 텍스트 파일의 첫 줄을 지우십시오.

보통 파일의 한 줄을 삭제해야 할 때 원본 파일과 임시 파일을 열고 그 다음 삭제할 원본 파일을 제외하고 임시 파일에 모든 줄을 씁니다. 분명히이 방법은 여기서 말하지 않을 것입니다.

그럼 어떻게 삭제합니까?

+0

다른 사람과 중복되는 http://stackoverflow.com/questions/1151713/delete-a-line-from-a-file-in-c-language –

답변

0

확실하지 않지만 다음과 같이 생각합니다. 줄 바꿈 문자이므로 해당 줄의 문자를 삭제해야합니다. + 새 줄 문자 그런데 모든 문자를 "이동"합니다 (이전 줄을 덮어 쓰려면 다른 위치에있는 각 문자를 복사하고 이전 위치에서 지우는 것과 같습니다.

아니요, 그냥 줄을 지울 수는 없습니다. 모든 파일을 다시 써야합니다.

5

가장 일반적으로 사용되는 파일 시스템에서 전체 파일을 다시 쓰지 않고도 파일 시작 부분에서 한 줄을 삭제할 수 없습니다. 하나의 큰 파일 대신 작은 파일을 많이 사용하고 하루에 한 번 예를 들어 회전시키는 것이 좋습니다. 이전 파일은 더 이상 필요하지 않을 때 삭제됩니다.

2

내부 또는 별도 파일로 파일을 다시 작성하지 않아도 불행히도 수행 할 수 없습니다.

당신이보고 싶은 것은 다른 파일에서 포인터를 유지하면서 첫 번째 미처리 된 줄의 위치를 ​​지정하는 것입니다.

그러면 프로세스가 파일을 열고 해당 위치를 찾고 일부 줄을 처리 한 다음 포인터를 업데이트합니다.

언제 까지나 파일을 롤오버해야 영원히 계속 커질 수 있습니다.

0

그럴 수는 없지만 파일이 작동하는 방식은 아닙니다. 당신이 당신의 프로그램이 각 로그 경우 등

0

을 닫는/다음 파일 열기의 기본 정보를 숨길 수있는, 메시지를 기록하기 위해 연결할 수있는 메시지 로깅 서비스/라이브러리의 일종이 필요한 것처럼

소리가 난다 행에 고유 한 식별자 (또는 줄 번호)가 있으면 구문 분석 할 때까지 식별자를 로그 파싱에 저장할 수 있습니다. 그렇게하면 로그 파일에서 아무 것도 변경할 필요가 없습니다.

로그 파일이 너무 커지기 시작하면 매일 (예를 들어) 새 로그 파일로 전환 할 수 있습니다.

관련 문제