【发布时间】:2017-09-13 15:12:40
【问题描述】:
我使用 BabyFTP 作为 Delphi 10.1 Berlin 应用程序的嵌入式 FTP 服务器。尽管我仍然不确定它是否是我可以满足我要求的最好的轻量级 FTP 服务器,但它似乎运行良好......除了一个细节:
在成功的 MKD 命令中,BabyFTP 以 250 响应,而不是预期的(由 RFC 和 Indy)257。因此,TIdFTP 引发了 EIdReplyRFCError 异常,它中断了我的信息流'正在尝试做(将 blob 字段保存到文件):
s := TBytesStream.Create;
Try
Field.SaveToStream(s);
MakeDir(TPath.GetDirectoryName(url));
Put(s, url);
Finally
s.Free;
End;
当然,我知道我可以将 MakeDir 行包装在 Try except 块中并忽略特定的异常类型。但这似乎有点冒险,因为从引发的异常我不能确定我得到了 250 或其他一些真正的错误。
我尝试查看 Indy 的响应代码是否可配置,但似乎它们在特定方法中是硬编码的。子类化 TIdFTP 是不可行的,因为方法不是虚拟的。我可以自定义 IdFTP.pas 单元,但我不想这样做,因为我在一个团队中工作,而且我不想将补丁分发到标准 Delphi 单元。
我可以使用另一台 FTP 服务器...但我想它们中的大多数都有一些像这个一样不完全标准的功能。
有人知道其他解决方法吗?雷米?
【问题讨论】:
-
引发的异常不会暴露状态码吗?然后您可以处理(并忽略)该特定情况。编辑:参见EIdReplyRFCError.ErrorCode 属性。
-
@OndrejKelle:很好......我正在查看描述(已删除响应代码)并且没有考虑寻找此类异常的特定属性。除了对 ErrorCode 的测试之外的尝试有效。将其发布为答案,我会接受。