大家帮我看看哪里出错了?小妹叩谢!

kevinhmily 2005-01-18 09:38:29
旧事重提。我想实现每隔两分钟自动下载FTP某文件夹下的所有文件,下载后删除。timer的属性已经设置好了。编译可以通过,运行时输入文件夹名称后报错:不合法的端口命令。不清楚是哪方面的问题,大家帮我看看啊,小妹多谢!代码如下:
void __fastcall TForm1::startClick(TObject *Sender)
{
AnsiString TheDir;
NMFTP1->Connect();
if(NMFTP1->Connected)
ShowMessage("ok!");
else
ShowMessage("error!");

if(InputQuery("改变目录","目录名",TheDir))
NMFTP1->ChangeDir(TheDir);
NMFTP1->List();
Timer1->Enabled=true;



}
//---------------------------------------------------------------------------


void __fastcall TForm1::stopClick(TObject *Sender)
{

NMFTP1->Disconnect();
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
TStringList * str=NMFTP1->FTPDirectoryList->name;
for (int i=0;i <str->Count ;i++)
{
AnsiString s=str->Strings[i];
NMFTP1->Download(s,s);
NMFTP1->Delete(s);
}
}
...全文
186 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
3996906 2005-01-20
  • 打赏
  • 举报
回复
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
TStringList * str=NMFTP1->FTPDirectoryList->name;
for (int i=0;i <str->Count ;i++)
{
AnsiString s=str->Strings[i];
NMFTP1->Download(s,s);
NMFTP1->Delete(s);
}
}
---------------------------------------------
把完成下载的文件名s从链表 str里移除掉~~~~~~~~~:)

你把文件删了,程序根据stringlist里的东西当然找不到正确路径了

也可以把定时器停掉
kevinhmily 2005-01-20
  • 打赏
  • 举报
回复
能啊,现在很奇怪,因为上面的那个程序我没考虑到文件夹里没有文件的问题,现在我又加了一个判断文件夹是否为空的语句,不空就执行,空的话就返回空。现在开始的时候是可以执行的了,但是只能执行两分钟,然后报错,说某个文件找不到正确的路径,而实际上该文件已经完成了下载和删除。
samchoy 2005-01-20
  • 打赏
  • 举报
回复
FTP本身没问题吗?你在本地能访问到吗?
kevinhmily 2005-01-20
  • 打赏
  • 举报
回复
没人回答我看来只能揭贴了
3996906 2005-01-20
  • 打赏
  • 举报
回复
写对了~~~~~还错就不对了~~~~~~~~你看看文件在不在哦~~~~~~~跟踪进去看看,这样改逻辑上没错误的~~~~

你如果用msn和qq的话可以直接跟我联系~~~~~~偶的qq 3996906
kevinhmily 2005-01-20
  • 打赏
  • 举报
回复
或者,在while语句里面不写NMFTP1->Delete(s);等while执行完了删除该文件夹里所有文件,我再试试
kevinhmily 2005-01-20
  • 打赏
  • 举报
回复
是这样吗?觉得你的建议不错,可是还是出现了同样的错误
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
TStringList * str=NMFTP1->FTPDirectoryList->name ;
while(str->Count)
{
AnsiString s= str->Strings[0];
NMFTP1->Download(s,s);
NMFTP1->Delete(s);
str->Delete(0);
}
}
3996906 2005-01-20
  • 打赏
  • 举报
回复
不是!你的文件名都在str中

你把文件删掉了就应该把文件名也从里面清楚掉,这个逻辑很清晰

我觉得你没必要写for循环~~~~~~~把自己弄被动了

直接找第一个文件,下载完了删掉这样你的str的count就会减1
只要不是0就while执行

这个定时进来时执行
TStringList * str=NMFTP1->FTPDirectoryList->name;

while(str->Count)
{
AnsiString s=str->Strings[0];
NMFTP1->Download(s,s);
NMFTP1->Delete(s);
str->Delete(0);
}
你再看看错8错
kevinhmily 2005-01-20
  • 打赏
  • 举报
回复
楼上的意思是说在执行完这个FOR循环后停掉定时器?那我怎样完成定时执行啊?
还有就是我本意就是要把下载完的文件从FTP上删除,如果是执行完所有下载的话再删除,是不是就没有这个问题了啊?
kevinhmily 2005-01-19
  • 打赏
  • 举报
回复
还有没有哪位大侠知道了?
kevinhmily 2005-01-18
  • 打赏
  • 举报
回复
还是不行啊,运行的时候报同样的错误
samchoy 2005-01-18
  • 打赏
  • 举报
回复
改一改试试

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
TStringList * str=NMFTP1->FTPDirectoryList->name;
for (int i=0;i <str->Count ;i++)
{
AnsiString s=str->Strings[i];
if (s != "." && s != "..")
{
NMFTP1->Download(s,s);
NMFTP1->Delete(s);
}
}
}
kevinhmily 2005-01-18
  • 打赏
  • 举报
回复
那哪里错了啊?在线等答案啊!
polocat2001 2005-01-18
  • 打赏
  • 举报
回复
编译通过只能说明没有语法错误。逻辑错误是可能存在的。
MEFULEU 2005-01-18
  • 打赏
  • 举报
回复
板凳ing!
MEFULEU 2005-01-18
  • 打赏
  • 举报
回复
呀,说错了!
MEFULEU 2005-01-18
  • 打赏
  • 举报
回复
TStringList * str使用后都没有delete!
samchoy 2005-01-18
  • 打赏
  • 举报
回复
直接在IE里输入FTP地址看看能不能打开,不行的话那就是FTP的问题了
kevinhmily 2005-01-18
  • 打赏
  • 举报
回复
port是系统默认的,我没有改动。 parselist已经设置为true, useid 和passward也没有错误。
我之前没加时间控件的时候是可以实现的,我把FTP的地址放到运行->cmd里面ping的时候是连不上的,不知道是不是这个原因啊?
samchoy 2005-01-18
  • 打赏
  • 举报
回复
看看你的NMFTP设置有没有问题,如Port,ParseList,UserID等
加载更多回复(1)

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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