흠.... 대충 뭘 원하시는진 이해가 가는군요.
랜덤하게 파일중간에 데이터를 삽입했다 지웠다 할건데
그 길이가 일정치 않기 때문에 곤란을 겪으신다......
그렇다고 메모리에 다 읽을 수도 없다........
아무래도 레조님께서 짧은 답글을 달아주신 그 내용으로 하는게 좋을 것 같네요
일종의 파일복사를 하는 거죠.
메모리로 다 읽어들이실필요는 없구요.
즉, 어떤 임시파일을 새로 생성해서
원본파일의 데이터 입력할 포인터 이전까지의 내용을
임시파일에 기록하는 겁니다.
그리고 나서 변경할 내용을 기록하시고,
그리고 원본파일에서의 없애야할 내용 그 다음부터의 내용을
아까의 임시파일에 기록하시고 나서.......
원본파일을 지우고, 임시파일명을 원본파일명과 동일하게 바꾸는 거죠.
이게 제 생각에도 맞는 것 같네요.
레조님께서 말씀하신 원론적인~~~~~~~~~ ㅡㅡ+
그리고 다른 쪽으로 생각을 돌리면....
인덱스 파일기법을 응용할 수도 있겠습니다.
물론 이게 좋다 다른게 좋다라고 꼭 집을 순 없겠죠. 경우마다 다르니깐......
예를 들자면, 각 데이터들의 기록시작위치와 점유하고 있는 길이를
따로 파일에다가 저장하는 겁니다.
그리고 데이터를 지울 일이 있다면, 인덱스 내용만 지우면 되겠지요.
그리고 삽입할 일이 있다면, 인덱스에 내용을 추가하고
데이터파일에는 제일 뒤에 추가를 하세요..........
물론 이렇게 하면 파일길이가 계속 길어지므로, 한번쯤 인덱스 기준으로
재정리해줄 필요가 있겠지요?
사용자가 혹은 시스템이 데이터 정리를 시작하면
그때는 인덱스에 맞게 파일들을 새로 정리해서 필요없는 부분은 빼고
새로운 데이터파일로 기록하는...... 그런 방식도 생각해볼 수 있습니다.
이 방법은 작업량이 한번에 많이 몰리는 경우에 유용하겠지요.
수시로 파일을 썼다 지웠다하는 것보다는....
그리고 삭제했던 것을 복구시킬수도 있겠지요.
데이터 삭제는 인덱스에서만 지운 것이지, 실제 데이터파일엔 그대로 남아있으니까요.
물론 데이터 정리작업을 하기 전이지만요.....
그리고 데이터의 갯수가 적고, 대신 한 데이터의 크기가 큰 경우에는
각각의 데이터마다 한개의 파일을 생성해서 사용하는 방법도 괜찮겠지요.
물론 이것도 인덱스 파일을 만들어서 관리하면 더 빠를 거구요.
제가 이런쪽으로 제대로 배운 적이 없어서
정석이다 아니다라곤 말씀못드리겠지만,
아무튼 도움이 되시길.......
## 찬이와닷컴 ::
http://chanywa.com