문제

이전의 델파이 프로젝트 중 일부를 살펴보고 D2009로 업그레이드합니다.이 버전은 이전의 모든 릴리스에 대한 큰 개선 (제네릭.collection -wow!))을 발견하면 다양한 문제에 직면합니다. 이것은 내가 해결할 수 있었지만 솔루션은 내가 생각하는 것만 큼 우아하게 보이지 않습니다. (참고, 나는 지금 약 3 년 동안 델파이 코드를 작성하지 않았으며, 그때까지도 무슨 일이 일어나고 있는지에 대한 심층적 인 이해보다 아마추어 해킹이었습니다).

내 코드에는 tfilestream이 있고 그것을 읽습니다. 파일의 첫 세 문자가 파일 유형을 유효한 것으로 인식하기 위해 CTR이라는 방식으로 이전 Delphi 앱에 의해 이전에 작성되었습니다. 독자는 처음 세 바이트에서 다양한 char 배열로 읽었습니다 (여기에는 문제가 있습니다. 이제 크기가 2 바이트입니다). 그런 다음이 배열을 문자열로 취급하여 'CTR'을 읽는지 확인하십시오.

var ...
buffer: array[0..2] of char;
begin
...
InStream.read(buffer, 3);
if buffer <>'CTR' then begin ShowMessage('Not a valid file!'); exit; end;
...

이것은 컴파일하고 작동하는 데 사용되었지만 이제 버퍼는 실제로 6 바이트 길이이므로 'CTR'과 같지 않습니다. 항상.

버퍼를 변경하여 이것을 수정했습니다 array[0..2] of byte 그리고 다음을 수행하기 위해 더 많은 로컬 변수를 소개했습니다.

for b in buffer do s := s + chr(b); //notice the for..in loop now available in D2009
if s<>'CTR'...

따라서 기본적으로 나는 개별 바이트를 문자열로 돌린 다음 비교를 수행하지만 더 간단한 방법이 있어야합니다. 이 문제에 대해 약간의 빛을 비추어 주시겠습니까?

도움이 되었습니까?

해결책

버퍼를 설정할 수 있습니다

var
  buffer: array[0..2] of AnsiChar;

그리고 당신은 이전과 똑같은 것을 읽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top