• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    해결됨

05_adtFileIO 질문있어요.

23.11.24 17:52 작성 조회수 218

0

search -> edit -> save 중 save에 궁금한 게 있습니다.

int SaveNodeToFile(MYNODE* pNode)를 보면

파일에서 불러낸 경우만 고려돼있습니다.

신규 데이터를 찾아서 수정하는 경우에는 저장하지 않고

프로그램 종료 시 신규 데이터 일괄로 저장하는 방법을 써야할까요?

 

pNode->bNew 값을 따져서 신규인지 구분하고

ab+모드로 파일 끝에 저장하는 건 생각했는데

파일에 저장했으니 bNew를 false로 수정해야하나?

수정하면 offset이 0이라 다시 검색할 때 offset이 0인 데이터를 찾을텐데? 그럼 offset 값은 어떻게 주지?

bNew 값을 true로 저장하고 신규 데이터 일괄 저장할 때 덮어 써야하나? 라는 고민에 빠졌습니다.

어떤 방법이 좋을까요?

 

 

 

답변 1

답변을 작성해보세요.

0

파일에 저장했다면 bNew는 false로 두는 것이 맞겠습니다. 해당 예제는 완성되지 않은 프로그램이며 개념을 설명하기 위한 예제입니다. 생각을 거듭하다보면 보완해야 할 부분이 많습니다. 그런 부분은 사실 수강자의 몫으로 남겨둔 측면이 강합니다. 예제 자체는 강의에서 제가 설명하려는 내용에만 충실한 측면이 있습니다.

자료를 검색할 때 기존 자료는 모두 파일에서 검색합니다. 메모리에 로드하는 것은 검색의 키값만 로드하지요. 그러나 한 번이라도 조회하면 데이터를 캐싱합니다. 다시 파일에서 읽지 않도록 하기 위함입니다. 그러나 새로 추가한 데이터는 파일에 저장하기 전 메모리 상에만 존재하도록 되어 있습니다. 종료 시 저장(추가)합니다.

관련해서 데이터 중복처리도 하지 않고 있습니다. 다시 말씀드리지만 손 볼 부분이 참 많습니다.

끝으로 옵셋 값을 계산하는 부분은 쉽습니다. 사용자가 추가한 새 데이터는 모두 메모리에 있으며 기존 파일 데이터에 덧붙이는 구조이므로 추가 저장되는 Offset은 기존 데이터 파일의 크기를 일괄 더해주면 되기 때문입니다. 물론 이 또한 제 개인적인 생각입니다. 더 고민해보시고 스스로 발전 방향을 찾아보시기를 권합니다. 그 과정에서 상당한 공부가 자연스럽게 될 것이기 때문입니다.

감사합니다. :)

한지수님의 프로필

한지수

질문자

2023.11.26

답변 고맙습니다.