파일(주로 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;
두가지에 대한 답변이 될런지 모르겠네요
그럼 이만..
아래는 전체에 대한 것이고
만약 일부분 이라면
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;