Q&A

  • 파일의 특정 부분부터 일부분만 버퍼에 저장하고자 할때
파일(주로 binary 파일)을 열어서 파일의 특정 위치에서부터
특정 크기만큼만 버퍼에 저장하려고 하는데 잘 안되네요...

아래와 같이 하면 전역으로 선언된
FileData 변수에 파일의 offset 위치에서부터
bsize 만큼 저장한 후 버퍼의 내용을 파일을 열어서
다른 파일로 쓰면 에러가 발생하네요....

무엇이 문제인가요....
도와주세요 고수님들...

만약 다른방법이 있다면 가르쳐주시기 바랍니다.



----------------------------------------------
그리고 덤으로...
Array of Byte 형으로 선언된 변수가  BBB 라고 할 때
BBB 에 파일로 부터 읽은 값을 넣은 후
PChar 변수 PP 에게 BBB 의 번지를 가르쳐 주고 싶은데
어떻게 해야하나요?
예를 들어 C 언어에서
char BBB[30]='abcdefg' ;
char *PP ;

PP = BBB ;  이렇게요... 이건 덤으로 ^^....
-------------------------------------------------


(참고 )
fn : 파일명
offset : 파일 포인터의 초기 위치
bsize : 버퍼에 저장할 크기


전역으로 선언
FileData : Array of char ;


procedure TForm1.GetBufferData(Sender: TObject; fn : PChar ; offset,bsize : integer);
var
   FS : TFileStream ;

begin

  FS := TFileStream.Create(fn, fmOpenRead);
  
  GetMem(FileData,bsize) ;  //  메모리 확보
  
  FS.Position := offset ;  // 파일포인터 이동
  
  FS.ReadBuffer(FileData[0],bsize );  // 버퍼에 저장
  
  FS.Free;
    }
end;
1  COMMENTS
  • Profile
    이중철 2004.02.18 05:22
    일단 질문내용은 잘 모르겠고 아래내용은 샘플이고요
    두가지에 대한 답변이 될런지 모르겠네요
    그럼 이만..
    아래는 전체에 대한 것이고
    만약 일부분 이라면
      MS.LoadFromStream(FS);
      이걸 빼고
      FS.Position := offset;  
      MS.CopyFrom(FS, bsize);
    이러면 될꺼에요

    procedure TForm1.GetBufferData(Sender: TObject; fn : PChar ; offset,bsize : integer);
    var
       FS : TFileStream ;
       p : pchar;
       i : integer;
       s : string;
       MS : TMemoryStream;
    begin
      FS := TFileStream.Create(fn, fmOpenRead);
      MS := TMemoryStream.Create;
      MS.LoadFromStream(FS);
      p := MS.Memory;
      for i := offset to offset + bsize do
      begin
         if (i - offset) mod 16 = 0 then
         begin
           s := s + chr(13) + chr(10);
         end;
         s := s + ' ' + inttohex(integer(p[i]), 2);
      end;
      Memo1.Lines.Text := s;
      MS.Free;
      FS.Free;
    end;
    • 2004.02.18 23:48
      일단.. 문제점이 좀 많이 보이네요... 아마 소켓 프로그램을 짜고 계시는 모양인데... 이 레코드(c에서...
    • 방재웅
      2004.02.18 10:12
      구조체 정의 부분에서 m_hakbun : array[1..7] of String;  ---> m_hakbun : array[1....
    • oRaDeSigner
    • 2004.02.18 05:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 마코디
      2004.02.19 08:11
      TSQLConnection에서 DriverName 을 Oracle 로 설정하시면 되구여 이때 함께 배포해야하는 DLL 파일이 있...
    • nilriri™
      2004.02.18 21:36
      ADOQuery.isEmpty속성을 사용하시면 됩니다. 해당 테이블이 존재하는지 여부는 DBMS의 데이터사전을 ...
    • 윤상현
    • 2004.02.18 03:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이중철
      2004.02.18 05:22
      일단 질문내용은 잘 모르겠고 아래내용은 샘플이고요 두가지에 대한 답변이 될런지 모르겠네요 그럼 이만...
    • Galaxy
      2004.02.18 03:18
      안녕하세요 수고 많습니다. 버튼을 StringGrid에 Add한것을 말하는것 맞교 그러면 체크박스 해제하는 ...
    • 황재훈
    • 2004.02.17 22:23
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 성더기
      2004.02.18 02:46
      http://www.borland.co.kr/delphi_net/pdf/delphi_net8_techview_kr.pdf 에 나오는거 같네요
    • 김운필
      2004.02.21 03:11
      순서가 바뀌었네요... ShowModal이 되는 순가 제어권이 넘어가서 실행되지 않습니다. 다음과 같이......
    • 성더기
      2004.02.18 02:41
      try finally구분에서 Form2.Show 를 하면 바로 다음 라인을 실행하기 때문에 폼이 떴다가 바로 닫혀버립...
    • 한원희
      2004.02.18 01:30
      안녕하세요. 한원희입니다. Form2 의 OnShow 에서 처음 한번 실행될 때만, Button1Click() 메소드를 ...
    • 레인시즈
      2004.02.17 22:05
      폼을 생성 한 후 모달 형식으로 띄우기 전에 버튼 동작 이벤을 호출 하며 됩니다. 모양새가 Form2....
    • 보리문디
      2004.02.17 23:20
      Form의 Visible 속성이 True가 되기 직전인지라 Error가 나지 않을까요 ? 읔... 아니나 다를까 조언해...
    • 유동기
      2004.02.18 00:11
      showmodal을 show로 바꿔보세요 아래 내용은 델마당에서 퍼온글입니다. Show와 ShowModal의 차이점은...
    • 보리문디
      2004.02.18 01:39
      show로 바꾸었더니... 그냥 화면 열리자 마자 닫혀 버렸습니다. 뭔가 머리를 많이 싸매야 할 듯 싶네요....
    • • • •
    • 손상엽
    • 2004.02.17 18:17
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최진욱
      2004.02.17 22:38
      흠 초보가 이런데 글을 올려도 되나 잘 모르겠지만.. 여하튼.. ^.^;; 흠 파일을 올리는 방법은 여러 방...
    • 손상엽
      2004.02.17 22:44
      파일 서버는... 지정 컴퓨터를 사용할꺼구요.... 그 쪽에... 파일을 업로드 하고... 다운 로드 하는 기...
    • 엑기스
    • 2004.02.17 11:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 한원희
      2004.02.17 18:09
      안녕하세요. 한원희입니다. OpenKey의 두번째 인자에 true값을 주면, 키가 없을 경우 생성됩니다. 그...
    • 고평수
    • 2004.02.17 08:06
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이중철
      2004.02.18 05:38
      모두 SDI로 구현하세요 저도 SDI 메인폼에 메뉴 클릭시 TAB BAR 형식으로  SDI폼 뛰우고 TAB...
    • 에이원
    • 2004.02.17 07:41
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2004.02.17 08:16
      안녕하세요. 최용일입니다. 에러메세지 그대로 QUICKREPORT 2 POWERPACK란게 쉐어웨어 버전이구 델파이 ...
    • 최두승
    • 2004.02.17 06:27
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 성더기
      2004.02.17 19:51
      shellExecute를 사용해보세요 실행파일 경로와 상관없이 파일타입에 따라 실행됩니다 탐색기에서 Excel파...
    • 이명희
    • 2004.02.17 05:12
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 방재웅
      2004.02.17 10:35
      정답은 아니지만 힌트를 드리자면 델파이에서 DLL을 사용하는 방법이 두 가지가 있습니다. LoadLibra...
    • 용이...
    • 2004.02.17 01:46
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 방재웅
      2004.02.17 10:45
      String하고 Char 개념하고 혼돈을 하시는거 같네요 ^^    FillChar(r, sizeof(r), #0); ...
    • 용이...
    • 2004.02.17 01:27
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 이원복
    • 2004.02.17 00:07
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 성더기
      2004.02.17 19:53
      Access는 Paradox와 달리 MDB파일이 테이블이 아닙니다 MDB파일은 데이터 베이스입니다 테이블의 MDB파일...
    • romantic
      2004.02.17 00:23
      테이블 명에 '.' 을 빼보세요.ㅡㅡ.. a.mdb -> 이게 사용자 a의 mdb 테이블.. 머 이런식이 아닐까...
    • 토토98
      2004.02.17 02:13
      안녕하세요. 혹시라도 도움이 될까해서 글을 올립니다. 5년전에 저두 같은 작업을 한적이 있었습니다. ...