作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个小应用程序,用于处理在另一个程序中创建的一些文件。我使用 Angus Johnson 的一个旧组件,名为 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;
最佳答案
当您的程序启动时,该组件不会通知更改,因为在您的程序启动时,还没有任何更改。
您的政策似乎是,在程序启动时,所有现有文件都将被视为"new"或“新更改”,因此您手动调用更改通知处理程序的方法是正确的。
组件检测到更改时执行的唯一操作是调用更改通知处理程序。如果您显式调用该函数,但仍然观察到“什么也没发生”,那么您的程序中存在更深层的问题需要调试;这不是组件或此处描述的基本方法的问题。
关于delphi - TDirectoryWatch 第一次未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19140499/
我有一个小应用程序,用于处理在另一个程序中创建的一些文件。我使用 Angus Johnson 的一个旧组件,名为 TDirectoryWatch 在我的 FormCreate 上,我有以下代码 D
我是一名优秀的程序员,十分优秀!