2012-05-14 1 views
3

큰 텍스트 파일이 있습니다.
프로그램을 실행할 때마다 첫 줄에서 읽고 제거한 다음 해당 데이터를 다시 파일 맨 아래에 넣어야합니다.Filestreams를 사용하여 A 텍스트 줄 제거 (C++)

파일의 모든 부분을 읽지 않고이 작업을 수행 할 수있는 방법이 있습니까?
그것은 의사 코드의 예를 따라 좋은 것 :

1. Open file stream for reading/writing 
2. data = first line of file 
3. remove first line from file <-- can I do this? 
4. Close file stream 

5. Open file stream for appending 
6. write data to file 
7. Close file stream 

나는 프로그램이 매일 특정 시간에 실행 때문이다 읽기 모든 것을 피하기 위해 노력하고있어 이유. 파일이 커질 때마다 지연이 길어지는 것을 원하지 않습니다.

내가 발견 한 모든 솔루션은 프로그램이 전체 파일을 처리해야합니다. C++ 파일 스트림이이 작업을 수행 할 수없는 경우, C++ 프로그램을 신속하고 효율적으로 실행할 수있는 대안이 필요합니다.
감사합니다.

+0

파일에 공백 개념이 있습니까? 라인을 완전히 제거하지 않고 희게하는 것이 가능합니까? – Potatoswatter

+0

@Potatoswatter이 작업을 수행 할 수는 있지만 문제는 여전히 있습니다. 파일의 상단에 여분의 공백 줄이 생길 때마다. 파일에 백 스페이스를 쓰려고 시도했지만 여전히 파일에 문자로 표시됩니다. Ernest가 제안한 데이터베이스가 최선의 방법이라고 생각합니다. 시간을 줄이려면 별도의 스레드가 필요합니다. –

답변

5

불행한 진실은 현대 OS의 파일 시스템이이를 위해 설계되지 않았다는 것입니다. 파일의 처음부터 무언가를 제거하는 유일한 방법은 첫 번째 비트를 제외하고 내용을 새 파일에 복사하는 것입니다. 단순히 원하는 일을 할 수있는 방법이 없습니다.

하지만 잘하면 약간의 재 설계가 가능합니다. 어쩌면 각 엔트리가 데이터베이스의 레코드가 될 수 있습니다 - 그러면 재정렬은 매우 효율적으로 수행 될 수 있습니다. 또는 파일에 고정 된 크기의 레코드가 포함되어있을 수 있으며 두 번째 인덱스 파일을 사용하여 레코드 순서를 지정할 수 있으므로 파일을 다시 정렬하면 인덱스를 업데이트하는 데 그쳤습니다.

+0

당신은 백 스페이스를 유사하게 만드십니까? 그 일 안할거야? – Rhexis

+0

@Flyphe : 파일에 백 스페이스 문자를 쓸 수 있습니다. 파일을 읽는 내용과 백 스페이스 문자를 처리하는 방법에 따라 * 작동 할 수도 있지만 규칙보다 예외로 간주 할 수 있습니다. –

+0

감사합니다. 대단히 감사합니다. – Rhexis

관련 문제