FDELPHI 12 /RE:04516 RE^3:Streamの標準出力へのWrite  こんにちは、十兵衛 さん 》う〜〜ん、どうなんでしょうね。。。私にもよくわからない現象ですね。 やっぱり write が悪いようです。 以下のプログラムで試して見ました。 program F_get; {$APPTYPE CONSOLE} uses Windows,SysUtils,Classes; var i: Integer; BufChar: array[0..1] of Char; Stream1: TMemoryStream; begin Stream1 := TMemoryStream.Create; try stream1.LoadFromFile('test.txt'); Stream1.Position := 0; for i:=0 to Stream1.Size-1 do begin Stream1.Read(bufChar,1); Write(bufChar[0]); end; finally Stream1.Free; end; end. このコードで、読み込んだファイルが半角文字だけなら正常に終了します。 ところが、2バイト全角文字1文字だけのファイルでも EAccessViolation が発 生してしまいました。ありゃりゃ、こんな落とし穴があるとは。 ところで、面白いことに、このプログラムでは標準出力をファイルにリダイレク トすると、全角文字を含んだファイルであっても EAccessViolation が発生しま せん。そして、出力結果のファイルは入力したファイルと完全に一致します。 ということで、多分、write の出力を画面出力することが悪いのではないか、と いう気がします。かといって、1バイトずつ2バイト文字かどうかということを チェックするのもコストが高そうなので、write を使う時は素直にファイル出力 させるようにしていきたいと思います。ま、型なしファイルで十分でしょう。 みなさん、どうもありがとうございました。                                 としき