我有一个小应用程序用于处理在另一个程序中创建的某些文件。 我用安格斯·约翰逊的旧组件调用TDirectoryWatch
TDirectoryWatch第一次没有触发
在我FORMCREATE如果该程序已启动且有把一个新的文件目录中的一切火灾和运行正常,我有以下代码
DirectoryWatch := TDirectoryWatch.Create(self);
DirectoryWatch.OnChange := FileAction;
DirectoryWatch.Directory := Folders.Path(dirInput);
DirectoryWatch.Active := True;
。 但是,如果程序启动时目录中有文件,即使我调用FileAction(nil),也不会发生任何事情;
FileAction
是处理文件
我必须FileAction将呼叫从弹出菜单和处理在目录中的文件
所以我的问题是过程的名称:如何确保现有文件在程序启动时处理?
还是有更好的方法来处理这个问题。对于FileAction
procedure TfrmMain.FileAction(Sender: TObject);
var
MailFile: string;
MailInfo: TMailInfo;
ListAttachments: TstringList;
i: integer;
MailBody: string;
begin
for MailFile in TDirectory.GetFiles(Folders.Path(dirInput), CheckType) do
begin
if FileExists(MailFile) then
begin
MailInfo := TMailInfo.Create(MailFile);
try
if FileProcessing = False then
begin
Logfile.Event('Behandler fil: ' + MailFile);
FileProcessing := True;
MailBody := '';
Settings.Load;
MailInfo.Load;
Settings.Mail.Signature := '';
Settings.Mail.Subject := MailInfo.Subject;
ListAttachments := TStringList.Create;
ListAttachments.Clear;
for i := 1 to MaxEntries do
begin
if (MailInfo.Attachment[i] <> '') and (FileExists(MailInfo.Attachment[i])) then
ListAttachments.Add(MailInfo.Attachment[i]);
end;
for i := 1 to MaxEntries do
begin
MailBody := MailBody + MailInfo.MailBody[i];
end;
try
if MailBody <> '' then
begin
if MailInfo.SenderBcc then
Mailing.Send(MailInfo.SenderMail, MailInfo.Recipient, MailInfo.SenderMail, MailInfo.Subject, MailBody, ListAttachments, True)
else
Mailing.Send(MailInfo.SenderMail, MailInfo.Recipient, MailInfo.Subject, MailBody, ListAttachments, True);
end;
finally
ListAttachments.Free;
end;
FileProcessing := False;
DeleteFile(MailFile);
end;
finally
MailInfo.Free;
end;
end;
end;
end;
将代码包含在您的'FileAction'中,这似乎是问题所在。 – Johan
我没有看到'FileAction'的实现与组件的行为有什么关系。如果你认为你的代码存在问题,那么你需要了解一下这是什么。当你没有描述你已经完成的调试时,你不能指望别人为你调试你的程序。你观察到什么行为,你期望什么?不过,这不是与*这个问题有关。 –
正如我所说我的问题是文件没有在程序启动时被处理,但是当程序正在运行并且文件被添加到'watch dir'中时,处理开始并且所有文件都被处理OK。 – OZ8HP