今、メールチェッカのようなアプリケーションを作っています。メールのチェックはNKPOP3を使っています。その中に
以下のようなコードがあります。
function TFrmSet.isKidoku(f, s, h , m , r: string): boolean;
{===============================================================================
既読ならtrueを返す。
===============================================================================}
var
Fname : string;
Mess : Mailmessages;
LogF : File of Mailmessages;
i : integer;
begin
Result := false;
Fname := ChangeFileExt(Application.exename,'.log');
AssignFile(LogF,Fname);
if FileExists(Fname) then begin //(1)
Reset(LogF); //(2)
for i :=0 to FileSize(LogF) - 1 do begin
Read(LogF,Mess);
if (Mess.From = f) and (Mess.Subject = s) and (Mess.Head = h)
and (Mess.MesID = M) and (Mess.RcvHead = r) then begin
Result := true;
end;
end;
CloseFile(LogF);
end;
end;
なんということもないコードです。これは、タイマーイベントで呼び出される
プロシジャから呼び出されている関数です。初回のタイマーイベントでは、何の
問題もなく値を返すのですが、二度目以降タイマーイベントで呼ばれると、どう
いうわけか(1)でファイルがあります、と評価されるのですが、次の(2)に進むと
EINOUTErrorファイルが見つかりません」となってしまいます。起きる状況はか
なり絞られています。当該メールに添付ファイルがある場合のみ発生します。
ブレークポイントを設けて確認したり、(1)の行の次にShowmessageでファイル
名を表示させたりしていますが、正しいファイル名が返っています。もちろ
んファイルをオープンしたらクローズする、TStringlistでメモリを確保したら
使用後に開放することは確認しています。これでもう一週間も悩んでいるので
すが、何か思い当たることはないでしょうか?
どうかヒントになりそうなことがありましたら教えてください。
|