FDELPHI 12 Streamの標準出力へのWrite みなさん、こんにちは。 D4 Standard と TIdFTP を使っていろいろと遊んでいます。 で、以前こちらの会議室で標準出力にバイナリでも書き出せると教わったので、 FTPでファイルを取得して、そのまま標準出力に書き出すだけのものを作って みました。単に TMemo の代わりというだけのことですが。 ま、あくまで学習を兼ねた実験ですから。 さて、自宅内のLAN上に一時的に立てたFTPサーバに対してファイルを要求 し、ファイルを取得して標準出力に出力することはうまくいっています。 ところがいくつかのファイルにおいて、出力後(プログラム終了時)に EAccess Violation が発生してしまいます。これ、発生するファイルは常に発生するし、 発生しないファイルはけっして発生しません。 このような状況なのですが、EAccessViolation が発生する条件がさっぱり絞りこ めません。ということで、コードを書きこみますので、原因と思しきところがわ かる方は御指摘いただけないでしょうか。 program F_get; {$APPTYPE CONSOLE} uses // dialogs, Windows,SysUtils,Classes,IdFTP; var i: Integer; BufChar: array[0..1023] of Char; Str1,Str2,FTPserver,FTPFile: string; IdFTP1 : TIdFTP; Stream1: TMemoryStream; begin Str1 := 'ftp://toshiki-2/spec.hd'; IdFTP1 := TIdFTP.Create(nil); Stream1 := TMemoryStream.Create; try {サーバ名を取り出す} str2 := copy(Str1,7,512); {7字目から尻尾まで} FTPserver := copy(str2,1,pos('/',str2)-1);{最初のスラッシュを探す} {ファイルパスを取り出す} FTPFile := copy(str2,pos('/',str2),512); {最初のスラッシュを探す} {サーバにコネクト} with IdFTP1 do begin User := 'anonymous'; Password := 'IEUser@'; Host := FTPserver; TransferType := ftBinary; Connect; Get(FTPFile,Stream1); // showmessage(cmdresult); Quit; end; with Stream1 do begin Position := 0; // showmessage(strtoint(size)); for i:=0 to Size-1 do begin Read(bufChar,1); system.Write(bufChar[0]); //←この辺でエラー発生 end; end; finally IdFTP1.Free; Stream1.Free; end; end. 実は当初、FTPの接続を Quit していなかったためか、必ず EAccessViolation が発生していたのでした。で、Quit するようにして最初のテストの時、無事にエ ラーなしでプログラムの実行が終わったので「あぁ、これが原因かぁ」と思った のですが、別のファイルを指定したらやっぱり発生。 現在のところ、試していること&わかっていることは以下の通りです。 ・試験環境は Win95a(NEC PC-9821) です。 ・まだテキストファイルの転送しか試していません。 ・EAccessViolation が発生しないファイルは何回試しても発生しないし、発  生するファイルは何回試しても発生します。 ・ファイルのサイズとは相関は見つかっていません。  97byte や 1.3Kbyte のファイルで発生しますが、0.8Kbyte とか 3.5Kbyte  のファイルでは発生しません。 ・今のところ、ファイル名との相関は見つかっていません。  例えば、拡張子なしのファイルでも、発生するものとしないものがあります。 以上です。多分、何か大ボケをかましているのだとは思うのですが。 「あれを試してみたらどうだ」みたいなことでも結構ですので、なにか御指摘い ただけると幸いです。                                  としき