如题,在ftp上有文件夹的名字假设为aaa,我如何用vc++实现找到它并把它下载到本地磁盘中?
建议者均有分,分数不够再加。

解决方案 »

  1.   


    使用CFtpFileFind和递归算法来遍历ftp目录
    http://www.vckbase.net/document/viewdoc/?id=734
      

  2.   

    用FtpFindFirstFile、InternetFindNextFile遍历查找,注意:如果要开始新的查找,必须先InternetCloseHandle关闭前一次查找的句柄。
      

  3.   

    void   Cmfcftp3Dlg::List()   
      {   
          CString   m_i;   
          CString   m_ii;   
        
          CStringArray   m_Dir;   
        
          CFtpFileFind       finder(m_pFtpConnection);   
                  BOOL   bWorking=finder.FindFile(_T("*"));   
        
          while   (bWorking)   
                        {   
                            bWorking   =   finder.FindNextFile();   
        
            if   (   finder.IsDots()   )   continue;   
            if   (     finder.IsHidden()   )   continue;   
        
            if   (finder.IsDirectory())   
                    {       
          m_Dir.Add(   finder.GetFileName());   
                    }   
            else   
                        {   
            m_i=finder.GetFileName()+"\r\n";   
            m_ftpinfo   +=m_i;   
                          UpdateData(FALSE);   
                      }   
            }   
        finder.Close();   
        
        for(int   i=0;i<m_Dir.GetSize();i++)   
        {   
        
                                m_i="["+m_Dir.GetAt(i)+"]"+"\r\n";   
                m_ftpinfo   +=m_i;   
        UpdateData(FALSE);   
        
                m_pFtpConnection->SetCurrentDirectory(m_Dir.GetAt(i));   
                                
        List();   
        
                m_pFtpConnection->SetCurrentDirectory("..");   
            }   
        
      }   
      

  4.   

    可以用CFtpConnection,但是我还是喜欢直接用SOCKET写。
    其实原理不难,用一个SOCKET用于Control,直接发FTP命令即可,如要取文件,先建立一个临时的监听Socket,把这个新建的SOCKET的端口用PORT命令先传过去,然后在原来的SOCKET里发一个RETR aaa命令,之后FTP Server会主动来连接你的监听Socket并发送文件给你。这样的好处是可以自己控制。如果用CFtpConnection的话,一旦遇到不支持SIZE命令的FTP Server,就挂了。
    可以参考TCP/IP详解一书,第一卷,FTP协议那一章,那章看一半,你就可以写出一个简单的FtpClient了。:)
      

  5.   

    LZ只是想知道怎么找到符合条件的文件吧?
    如果这个条件在文件名上就能体现的话,直接用FindFile(符合条件的文件名)遍历此目录即可。
    如果是一些隐藏条件,比如找只读文件:那就遍历所有,挨个取其属性。