Q&A

  • 바이너리 파일을 읽어서 처리에대한 질문입니다.
C의 소스를 보다 델파이로 옮기는 중인데
바이너리 파일 하나를 읽어서 처리를 해볼려고 합니다.
바이너리 파일은 처음 128Byte가 헤더이고
블록이 1024 바이트씩입니다 그리고 블록이 끝나면 Trailer가 128Byte가
있습니다. 처음 128Byte는 건너 뛴다음 블록을 1024바이트씩 읽으면
한블록의 처음 12바이트가 블록의 헤더가 됩니다.
블록의 12Byte를 건너뛰고 108바이트씩 짤라내면 하나의 레코드가 됩니다...
그런데 C에서 처럼 memcpy썼으면 좋겠는데 같은 기능을 하는 함수가
있는지 질문드립니다.
밑에는 완성하지 못한 소스입니다.

var
     iFileHandle, iFileSize : Integer;
     Buf : PChar;
     R_CDR : array [1..108] of char;
     FBLOCK : array [1..1024] of char;
     i, BLOCK_CNT, R_CNT, rec_cnt_blk, iBytesRead : Integer;
begin
     if OpenDialog1.Execute then
     begin
          try
               iFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead);
               iFileSize := FileSeek(iFileHandle,0,2);
               FileSeek(iFileHandle,128,0);
               iBytesRead := FileRead(iFileHandle, FBLOCK, sizeofFBLOCK));
               showmessage(inttostr(iBytesRead));
               while iBytesRead <> 0 Do
               Begin
                    Inc(BLOCK_CNT); // Total Block Count //
                     // 1 Block 내에 있는 CDR 수 //
아래는 블록의 헤더중 11번째 Byte가 한블록에 몇개의 Record를 가지고
있는지 값을 가지고 있는데 그값을 가지고 올려고 하니 에러가 나더군요
                    rec_cnt_blk := StrToInt(FBLOCK[11]);

                    for i := 0 to rec_cnt_blk do
                    begin
                         CDR_CNT := CDR_CNT + 1; // Total CDR Count //
                         iBytesRead := iBytesRead + 12 + (i * 108);
                         //R_CDR := FBLOCK + 12;
                    end;}

                    iBytesRead := FileRead(iFileHandle, FBLOCK, sizeof(FBLOCK));
               end;
               FileClose(iFileHandle);

          finally

          end;
2  COMMENTS
  • Profile
    김용덕 2003.07.14 20:42

    안녕하세요.
    C에서 memcpy같은 함수를 찾으신다기에 답변을 드립니다.
    델파이에서 memcpy와 같은 기능을 하는 함수는 제가 알고있는것은 두가지가 있는데요.
    그중 하나는 CopyMemory라는 함수가 있구요
    또하나는 Move라는 함수가 있습니다.
    실제로 CopyMemory의 구현소스를 보게되면 달랑 Move함수 한줄로 해놨더군요.

    도움이 되시길...
    그럼 이만...
  • Profile
    송승호 2003.07.14 23:02