新手,求教Delphi Indy控件上传问题

鬼五拾柒 2015-08-05 10:43:48

//检索文件夹并上传
procedure TForm1.Button4Click(Sender: TObject);
var
Search:TSearchRec;
first:string;
tr:TStrings;
begin
//连接FTP服务器
tr := TStringlist.Create;
IdFTP1.Host:=Help.ftpadd;
IdFTP1.Username:=Help.ftpname;
IdFTP1.Password:=Help.ftppwd;
IdFTP1.Connect();
Form1.ListBox1.Items.clear;
if (Edit1.Text<>'c:\') and (Edit1.Text<>'C:\')
then
begin
if rightStr(Edit1.Text,1)<>'\' then Edit1.Text:=Edit1.Text+'\';
FindFirst(Edit1.Text+'*.*',faAnyFile,Search);
While FindNext(Search)=0 do
begin
if Search.Name[1] <> '.' then //如果文件名不为"."或".."
begin
if (ExtractFileExt(Search.Name)='.txt') or (ExtractFileExt(Search.Name)='.gnlog') then
begin
//Form1.ListBox1.Items.Add(Search.Name);
//showmessage(Search.Name);
first:=leftStr(Search.Name,1);
//showMessage(first);
if Help.isnum(first)<>false then //判断文件名以英文字母的不用上传
begin
if Help.IsFileInUse(Search.Name)=false then //判断文件是否被使用
begin
with adoquery1 do
begin
close;
sql.clear;
sql.add('select * from t_jl0030 where filename='''+Search.Name+''' and com_mac='''+mac+''''); //判断文件是否上传
// showmessage(sql.Text);
open;
end;
if ADOQuery1.isEmpty then
begin
IdFTP1.ChangeDir('Test');
showmessage(Search.Name);
IdFTP1.Put(Edit1.Text+'\'+Search.Name,Search.Name,true);
Form1.ListBox1.Items.Add(Search.Name);
IdFTP1.Free;
end
end
end
end
end
end
end
end;

上传第一个文件没问题,第二个文件就报错 The system cannot find the file specified
...全文
115 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyhoo163 2015-08-08
  • 打赏
  • 举报
回复
问题解决了,就好。
鬼五拾柒 2015-08-05
  • 打赏
  • 举报
回复
问题已解决,把IdFTP1.ChangeDir('Test');放到循环外面就可以了,结贴
鬼五拾柒 2015-08-05
  • 打赏
  • 举报
回复
引用 1 楼 ksrsoft 的回复:
IdFTP1.ChangeDir('Test'); 每次从根目录试试
不懂?把Test 目录改成根目录?还是?
缘中人 2015-08-05
  • 打赏
  • 举报
回复
IdFTP1.ChangeDir('Test'); 每次从根目录试试
使用TIdAntiFreeze对抗“冻结”   Indy使用一个特殊的组件TIdAntiFreeze来透明地解决客户程序用户界面“冻结”的问题。TIdAntiFreeze在Indy内部定时中断对栈的调用,并在中断期间调用Application.ProcessMessages方法处理消息,而外部的Indy调用继续保存阻塞状态,就好像TIdAntiFreeze对象不存在一样。你只要在程序中的任意地方添加一个TIdAntiFreeze对象,就能在客户程序中利用到阻塞式Socket的所有优点而避开它的一些显著缺点。   Indy使用了线程技术   阻塞式Socekt通常都采用线程技术,Indy也是如此。从最底层开始,Indy的设计都是线程化的。因此用Indy创建服务器和客户程序跟在Unix下十分相似,并且Delphi的快速开发环境和Indy对WinSock的良好封装使得应用程序创建更加容易。   Indy服务器模型   一个典型的Unix服务器有一个或多个监听进程,它们不停地监听进入的客户连接请求。对于每一个需要服务的客户,都fork一个新进程来处理该客户的所有事务。这样一个进程只处理一个客户连接,编程就变得十分容易。   Indy服务器工作原理同Unix服务器十分类似,只是Windows不像Unix那样支持fork,而是支持线程,因此Indy服务器为每一个客户连接分配一个线程。   图1显示了Indy服务器的工作原理。Indy服务器组件创建一个同应用程序主线程分离的监听线程来监听客户连接请求,对于接受的每一个客户,都创建一个新的线程来为该客户提供服务,所有与这一客户相关的事务都由该线程来处理。   使用组件TIdThreadMgrPool,Indy还支持线程池。   线程与Indy客户程序   Indy客户端组件并未使用线程。但是在一些高级的客户程序中,程序员可以在自定义的线程中使用Indy客户端组件,以使用户界面更加友好。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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