Pergunta

Passando por alguns dos meus projetos Delphi mais velhos e atualizá-los para D2009, como eu encontrar esta versão uma grande melhoria (Generics.Collections - wow;)) para todas as versões anteriores, I encontrar vários problemas. Esse eu consegui resolver, mas a solução não parece meio tão elegante como eu acredito que poderia ser. (Note, eu não tenho escrito código Delphi por cerca de três anos e, mesmo naquela época era pirataria em vez amador do que a compreensão em profundidade do que está acontecendo).

Meu código teria um TFileStream e ler a partir dele. Os arquivos foram escritas anteriormente pelo meu mais velho aplicativo Delphi de uma forma que os três primeiros caracteres no arquivo seria CTR para reconhecer o tipo de arquivo como válido. O leitor lia nos três primeiros bytes em um array de caracteres (e aqui está o problema, agora que sizeof (char) é de 2 bytes) e, em seguida, tratar essa matriz como corda para ver se ele lê '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;
...

Isto irá compilar e que costumava trabalhar, mas agora o buffer é praticamente 6 bytes de comprimento e, portanto, não é igual a 'CTR' nunca .

Eu reparei isso alterando o buffer para array[0..2] of byte e eu introduziu algumas variáveis ??mais locais para fazer o seguinte:

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

Então, basicamente, eu viro os bytes individuais em uma string e então fazer a comparação, mas deve haver uma maneira mais simples de fazer isso. Você pode por favor lançar alguma luz sobre esta questão?

Foi útil?

Solução

Você pode definir o buffer para

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

e você vai ler em exatamente a mesma coisa como antes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top