게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
c언어 바이너리 파일 읽는방식에 대한 질문입니다.
게시물ID : programmer_9414짧은주소 복사하기
작성자 : SuDDenBLAST
추천 : 0
조회수 : 2169회
댓글수 : 8개
등록시간 : 2015/04/17 13:28:01
옵션
  • 베스트금지
  • 본인삭제금지

11.jpg
현재 zip 파일을 c로 바이너리 타입으로 읽어내, 해당 파일 내에 데이터를 추출하는 프로그램을 만들고 있습니다.

이때 .zip 파일은 기본적으로 파일 구조가 header인 P K 3 4 로 시작하며, 뒤에 필요한 데이터들이 순서대로 들어가 있으며

데이터가 끝나면 다시 두번째 파일의 header인 P K 3 4가 나오게 됩니다.

쉽게 설명하자면 file.zip 파일 안에 folder(폴더), file.exe(파일) 이렇게 파일 2개가 있다고 치면,

바이너리 타입으로 folder 의 header인 P K 3 4 . . . . . . . 이런식으로 진행되다

첫번째 파일이 끝나고, 두번째 파일인 file.exe 의 header인 P K 3 4 . . . . . . . 가 나오는 구조입니다.


문제는 이 파일을 c언어에서 읽어낼 때 어떻게 읽는지 모르겠습니다.

최초의 P K 3 4는 zip 파일을 바이너리 형식으로 열어, fread(HE_magic, sizeof(BYTE), 4, fp); [이때 BYTE는 1바이트의 새로운 타입입니다.)

라는 코드를 입력하면, HE_magic[0] 에 P, [1]에 K... 이런식으로 입력이 됩니다.

이런식으로 파일을 읽다가 다음 P를 찾기 위해 fread(HE_magic, sizeof(BYTE), 1, fp); 을 루프로 돌리고, P가 찾아지면

한번 더 fread(HE_magic, sizeof(BYTE), 1, fp); 를 실시했을 때 그 값이 K이면 루프를 종료하고 빠져나오게 했습니다.

하지만 마땅히 나와줘야 할 P K가 무한대로 루프를 돌려도 나타나지가 않네요.


제가 사용하는 코드에 문제가 있는걸까요? 사실 저런 형식이 아닌 fread(HE_magic, sizeof(DWORD), 1, fp); 로 통째로 PK34를 읽어낼수도 있지만, 이렇게 읽어버리면 다음 PK34를 읽어내지 못할 것 같아서 BYTE 단위를 사용하였습니다.

(예를 들자면, 앞 내용이 홀수바이트로 끝나서 xPK3 으로 읽어버린다던지..)


혹시 제가 서술한 내용중에서 틀린 부분이 어딘지 짚어주시면 감사하겠습니다.

그리고 이해를 돕기 위해 해당 파일의 바이너리 모양을 첨부합니다.

분명 빨간색 네모처럼 PK34가 존재하지만, 루프를 돌려도 읽어내질 못합니다..

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호