소스를 분석하는데 잘 모르겠어서 이렇게 질문을 올려요..
고수님들 한수 부탁 드립니다... 꾸벅
사용된 변수
stream : TFileStream;
buff:arry[0..1500] fo char ;
readcount:longint;
ncnt:integer;
모르는 부분...
Stream:=TFileStream.create('경로',fmopenread);
readcount:=Stream.read(buff,5); <==이부분 buff란 배열에 값을 집어넣지 않았습니다.
buff[readcount]:=#0 ; <== #0 이 의미 하는게 뭔지 모르겠구요
ncnt:=strtoint(buff) <== buff란 배열변수를 어떻게 쓴건지 이해가 안감...
Stream.seek(-5,1) <== 뭔지 모르겠음..
Stream.read(buff,ncnt) <== 여기도 모르겠음..
Stream:=TFileStream.create('경로',fmopenread);
readcount:=Stream.read(buff,5); // 스트림에서 5바이트를 읽어서 Buff란 배열에 저장합니다. 성공적으로 읽혀진 바이트수를 ReadCount에 반환하구요..
buff[readcount]:=#0 ; // 변수선언부에 보시면 아시겠지만 Zero-based Character(인덱스 0부터 시작하는 문자배열)입니다. PChar형이라고 볼수도 있구요. 이건 델파이에서 string형과 호환되는 타입입니다. 문자열의 끝은 널종료문자(#0)로 끝나죠. 그러니까 읽어온데이터의 마지막에 #0를 넣어서 문자열의 끝을 표시해줍니다.
ncnt:=strtoint(buff); // 위에서 얘기했듯이 널종료문자열은 string과 호환됩니다. 아마두 파일에 숫자로 표시되는 문자들('0', '1', ...)이 들어있는거 같네요. 이렇게 숫자로 표시되는 문자열을 정수로 바꾸는 겁니다.
Stream.seek(-5,1); // 1 (=soFromCurrent), 즉 파일의 현재 위치에서 -5만큼 파일포지션을 변경하라는 얘기입니다. 그러니까 파일포지션이 뒤로 5바이트 이동하겠죠. 위에서 5바이트 읽어서 다시 5바이트 뒤로 돌아갔으니까 맨처음의 위치가 되겠네요...
Stream.read(buff,ncnt); // ncnt만큼읽어서 Buff에 저장합니다.
대강 분석해보면 파일에 어떤 데이터가 들어있는데 맨처음 5바이트에 그 데이터의 크기가 들어가네요... 그러니까 처음에 5바이트 읽어서 그 데이터의 크기를 구하고 다시 파일포인터를 처음으로 이동해서 완전한 전체 데이터를 읽네요...
^^ 항상 즐코하세요...