#coding:utf-8
from ctypes import *
importosimportsysimportftplibclassmyFtp:
ftp=ftplib.FTP()
bIsDir=False
path= ""
def __init__(self, host, port='21'):#self.ftp.set_debuglevel(2) #打开调试级别2,显示详细信息
#self.ftp.set_pasv(0) #0主动模式 1 #被动模式
self.ftp.connect( host, port )defLogin(self, user, passwd):
self.ftp.login( user, passwd )printself.ftp.welcomedefDownLoadFile(self, LocalFile, RemoteFile):
file_handler= open( LocalFile, 'wb')
self.ftp.retrbinary("RETR %s" %( RemoteFile ), file_handler.write )
file_handler.close()returnTruedefUpLoadFile(self, LocalFile, RemoteFile):if os.path.isfile( LocalFile ) ==False:returnFalse
file_handler= open(LocalFile, "rb")
self.ftp.storbinary('STOR %s'%RemoteFile, file_handler, 4096)
file_handler.close()returnTruedefUpLoadFileTree(self, LocalDir, RemoteDir):if os.path.isdir(LocalDir) ==False:returnFalseprint "LocalDir:", LocalDir
LocalNames=os.listdir(LocalDir)print "list:", LocalNamesprintRemoteDir
self.ftp.cwd( RemoteDir )for Local inLocalNames:
src=os.path.join( LocalDir, Local)ifos.path.isdir( src ): self.UpLoadFileTree( src, Local )else:
self.UpLoadFile( src, Local )
self.ftp.cwd("..")return
defDownLoadFileTree(self, LocalDir, RemoteDir):print "remoteDir:", RemoteDirif os.path.isdir( LocalDir ) ==False:
os.makedirs( LocalDir )
self.ftp.cwd( RemoteDir )
RemoteNames=self.ftp.nlst()print "RemoteNames", RemoteNamesprint self.ftp.nlst("/del1")for file inRemoteNames:
Local=os.path.join( LocalDir, file )ifself.isDir( file ):
self.DownLoadFileTree( Local, file )else:
self.DownLoadFile( Local, file )
self.ftp.cwd("..")return
defshow(self, list):
result= list.lower().split( " ")if self.path in result and "
self.bIsDir=TruedefisDir(self, path):
self.bIsDir=False
self.path=path#this ues callback function ,that will change bIsDir value
self.ftp.retrlines( 'LIST', self.show )returnself.bIsDirdefclose(self):
self.ftp.quit()if __name__ == "__main__":
ftp= myFtp('*****')
ftp.Login('***','***')
ftp.DownLoadFileTree('del', '/del1')#ok
ftp.UpLoadFileTree('del', "/del1")
ftp.close()print "ok!"