TIdFTP.get 报错 'destination file already exists' 的问题

一本假正经 2009-02-16 11:51:53
我在Indy网站上下了一个关于TIdFTP的demo,其中有这么一句:

FTP.Get(FileName, SaveFile.FileName, true, true);

总是报错'destination file already exists',明明目录下没有那个文件。如是我看看get实现的源码



procedure TIdFTP.Get(const ASourceFile: string; ADest: TIdStream; AResume: Boolean = False);
begin
//for SSL FXP, we have to do it here because InternalGet is used by the LIST command
//where SSCN is ignored.
ClearSSCN;
AResume := AResume and CanResume;
ADest.Position := 0;
InternalGet('RETR ' + ASourceFile, ADest, AResume);
end;

procedure TIdFTP.Get(const ASourceFile, ADestFile: string; const ACanOverwrite: boolean = False;
AResume: Boolean = false);
var
LDestStream: TIdStream;
begin

AResume := AResume and CanResume;
if ACanOverwrite and (not AResume) then begin
Sys.DeleteFile(ADestFile);
LDestStream := TFileCreateStream.Create(ADestFile);
end

else begin
if (not ACanOverwrite) and AResume then
begin
LDestStream := TAppendFileStream.Create(ADestFile);
end
else
begin
raise EIdFTPFileAlreadyExists.Create(RSDestinationFileAlreadyExists);
end;
end;

try
Get(ASourceFile, LDestStream, AResume);
finally
Sys.FreeAndNil(LDestStream);
end;
end;



我看了raise EIdFTPFileAlreadyExists.Create(RSDestinationFileAlreadyExists);之前的代码发现get方法的后两个boolean参数不能相同啊,即不能同时为true或false,不能既覆盖又重传(可以接受),不能不覆盖不重传,但默认的两个参数的值是两个false,这是怎么搞的嘛?

还想问一个问题:TIdFTP如何支持sftp呢?我看它有这个属性FUsingSFTP : Boolean;但是它是只读属性,没办法啊。
...全文
479 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuihan20e 2009-02-17
  • 打赏
  • 举报
回复
indy10应该可以吧
starluck 2009-02-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 gyk120 的回复:]
直接用SSH作通道行吗?
或者改成Winsock。。。
[/Quote]

可行。呵呵。從原生SOCKET去做。 INDY不支持這個協議。
bdmh 2009-02-16
  • 打赏
  • 举报
回复
ACanOverwrite文件存在时可以覆盖文件
AResume断点续传

用ACanOverwrite就不用AResume
starluck 2009-02-16
  • 打赏
  • 举报
回复


FTP.Get(FileName, SaveFile.FileName, false, true);

一本假正经 2009-02-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 gyk120 的回复:]
直接用SSH作通道行吗?
或者改成Winsock。。。
[/Quote]

都不会搞啊,哈哈
gyk120 2009-02-16
  • 打赏
  • 举报
回复
直接用SSH作通道行吗?
或者改成Winsock。。。
starluck 2009-02-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lbinim 的回复:]
我也试过两个参数不相同的情况,确实可行。

那如何支持sftp呢?
[/Quote]

indy 不支持SFTP的。想想其它辦法吧。
一本假正经 2009-02-16
  • 打赏
  • 举报
回复
我也试过两个参数不相同的情况,确实可行。

那如何支持sftp呢?

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧