各位大侠请进:一个关于FTP的、经常要用到的、简简单单的、但是我不太明白的问题。(200) (200分)

  • 主题发起人 主题发起人 白衣书生
  • 开始时间 开始时间

白衣书生

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠好:
我用的是 IdFTP 。 怎么判断FTP服务器的FTP目录下是否存在一个指定的文件夹?

如判断是否存在名字为“DFW”的文件夹,如不存在则创建之。

我这样写:
if 存在 then //------关键这里该怎么写啊?????
begin
IdFTP1.put(XXXXX);
.............
end
else //不存在
try
IdFTP1.MakeDir('DFW'); //新建文件夹DFW
except
end;

请各位指点。 多谢。
假如IdFTP,用那个控件能够做到啊? NMFTP能够吗?
 
用DirectoryExists呀,参数就写'dfw'
NMFTP和IdFTP都可以的,但我强烈推荐用IDFTP,bug比NMFTP少多了
 
DirectoryExists 能在客户端用来判断FTP 服务器上的文件夹路径吗?
我去试试,如能,我马上送分。
 
有,你看看下面的(功能是把硬盘上的一个目录包括子目录上传到ftp上,如果是ftp
根目录那么sToDirName就设为''就行了)
function TForm1.DoUploadDir(sDirName:String;sToDirName:String):Boolean; //上传主函数
var
hFindFile:Cardinal;
t,tfile:String;
sCurDir:String[255];
FindFileData:WIN32_FIND_DATA;
begin
//先保存当前目录
sCurDir:=GetCurrentDir;
ChDir(sDirName);
hFindFile:=FindFirstFile('*.*',FindFileData);
if hFindFile<>INVALID_HANDLE_VALUE then
begin
if not DirectoryExists(sToDirName) then
begin
if(sToDirName<>'') then
IdFTP1.MakeDir(sToDirName);
end;
repeat
tfile:=FindFileData.cFileName;
if (tfile='.') or (tfile='..') then
Continue;
if FindFileData.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY then
begin
t:=sToDirName+'/'+tfile;
// showmessage(sDirName+'/'+tfile+','+t);
// if not DirectoryExists(t) then
// NMFTP1.MakeDirectory(t);
if sDirName[Length(sDirName)]<>'/' then
DoUploadDir(sDirName+'/'+tfile,t)
else
DoUploadDir(sDirName+tfile,sToDirName+tfile);
end
else
begin
t:=sToDirName+'/'+tFile;
try
{ NMFTP1.Mode(MODE_BYTE);
AssignFile(F, tfile);
Reset(F);
FSize := FileSize(F);
CloseFile(F);
NMFTP1.Allocate(FSize);
}
IdFTP1.Put(tfile, t);
except end;
end
until FindNextFile(hFindFile,FindFileData)=false;
// FindClose(hFindFile);
end
else
begin
ChDir(sCurDir);
result:=false;
exit;
end;
//回到原来的目录下
ChDir(sCurDir);
result:=true;
end;
 
多谢 naughtboy 大侠照顾,我正在分析您的代码。
 
什么乱七八糟的,服务器端的目录结构能用DirectoryExists吗?!!!

不管什么ftp控件,肯定支持转换当前目录吧?你用控件切换服务器目录,不出错就说明存在嘛!
 
to 一个过客:
>>>你用控件切换服务器目录,不出错就说明存在嘛!

是的,最一开始我就是这样做的----不出错就说明存在嘛!

我的确能用 Except 来捕获并隐藏这个异常,但是只能在exe文件中隐藏,
而现在我在IDE 中调试,老是异常,很麻烦。
 
我的确能用 Except 来捕获并隐藏这个异常,但是只能在exe文件中隐藏,
而现在我在IDE 中调试,老是异常,很麻烦。
=======================================================
你可以在IDE的Project属性中设置一下,禁止异常的。
 
to naughtboy大侠:
我是要判断FTP服务器上的、FTP目录下的文件夹是否存在。
如: 在FTP 目录下有‘DFW’这个文件夹,用你所说的DirectoryExists来判断,以下代码:

if DirectoryExists(Idftp1.RetrieveCurrentDir+'/'+'DFW') then
Showmessage(Idftp1.RetrieveCurrentDir+'/'+'DFW'+'已经存在')
else
ShowMessage(Idftp1.RetrieveCurrentDir+'/'+'DFW'+'不存在');
判断失败。

换成这样:
if DirectoryExists('DFW') then
Showmessage('已经存在')
else
ShowMessage('不存在');
判断亦失败。
--------------------------
我不知道您的这里的代码:
if not DirectoryExists(sToDirName) then
begin
if(sToDirName<>'') then
IdFTP1.MakeDir(sToDirName);
end;
是怎么判断的? 是判断什么的? 是本机(客户端)上的路径的吗? 愿闻其详。谢谢。
 
IDE中的异常是可以关闭的。/tools/debugger options/language exceptions/
将STOP ON DELPHI EXCEPTIONS前的钩去掉。以后在执行TRY
EXCEPT语句时就不回出现异常了

 
各位:重点不是IDE异常的问题,这个我也知道。
不要跑题。
怎么解决FTP的问题才是正事。
 
查了一下旧帖,发现一个一样的问题,不过没有结果。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=0946729

我需要判断的文件目录结构没有那么深。
只需要能判断出 当前目录下是否存在某个指定的文件夹(或文件)。 提提。
 
可以获取目录下全部的文件夹列表,然后判断
象这样,也是TIDFTP
//检查用户操作记录目录
ResultList.Clear;
HDECFTP.List(ResultList, '', false);

if ResultList.IndexOf('FTPAction-Records-For-' + sReceiverUserID) = -1 then //如果不存在用户操作记录目录则创建之
HDECFTP.MakeDir('FTPAction-Records-For-' + sReceiverUserID);
 
获取当前目录下的全部文件夹列表,然后判断,下面的程序我用过,没有问题
代码:
         //检查用户操作记录目录
          ResultList.Clear;
          IDFTP.List(ResultList, '', false);

          if ResultList.IndexOf('DFW') = -1 then   
          //如果不存在用户操作记录目录则创建之
            IDFTP.MakeDir('DFW');
 
starkbl的方法是正解,我的方法是旁门左道,其他人的方法是骗分
 
多谢 starkbl和一个过客 大侠的指点。

D6自带的DEMO就能得到FTP所有的目录。还能够切换目录,只是有点烦琐而已。 [:)]
 
发钱。 结贴了。[:)]
 
没成功。再发。[:)]
 
大家好,这个makedir函数是哪里来得,需要声明什么东西,我老是出错。谢谢解答
 
后退
顶部