私の古い Delphi プロジェクトのいくつかを調べて D2009 にアップグレードすると、このバージョンは以前のすべてのリリースに比べて大幅に改善されている (Generics.Collections - すごい! ;)) ため、さまざまな問題が発生します。これはなんとか解決できましたが、解決策は私が信じているほどエレガントではないようです。(注意してください、私は約 3 年前から Delphi コードを書いていません。その当時でさえ、何が起こっているのかを深く理解するというよりは、むしろアマチュア的なハッキングでした)。
私のコードには TFileStream があり、そこから読み取られます。ファイルは、ファイルの最初の 3 文字が有効なファイル タイプとして認識される CTR になるように、私の古い Delphi アプリによって以前に書き込まれました。リーダーは、最初の 3 バイトを char の配列に読み込み (これが問題で、sizeof(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'...
したがって、基本的には個々のバイトを文字列に変換してから比較を行いますが、これを行うにはもっと簡単な方法が必要です。この問題に光を当てていただけますか?