问题描述
我正在尝试将所有目录、子目录和文件从 FTP 服务器复制到本地目录。部分文件复制成功,但FTP中存在的其余文件出现550 File not found,将带扩展名的文件名复制到本地目录中,但文件已损坏并且无法使用。其余文件在复制时损坏是什么原因?
import errno
import os.path
import sys
from ftplib import FTP,error_perm
host = 'localhost'
username = 'user'
password = 'pass'
port = 21
ftp = FTP()
ftp.connect(host,port)
ftp.login(username,password)
filenameCV = "path/to/directory"
ftp.set_debuglevel(2)
def get_all_files_and_directories(path,destination):
try:
ftp.cwd(path)
os.chdir(destination)
mkdir_p(destination[0:len(destination)] + path)
# print("Created: " + destination[0:len(destination)] + path)
except OSError:
pass
except error_perm:
# print("Error: Could not change to " + path)
sys.exit("Ending Application")
file_list = ftp.nlst()
for file in file_list:
try:
ftp.cwd(path + file + "/")
get_all_files_and_directories(path + file + "/",destination)
except error_perm:
os.chdir(destination[0:len(destination)] + path)
try:
ftp.retrbinary("RETR " + file,open(os.path.join(destination + path,file),"wb").write)
# print("Downloaded: " + file)
except Exception as er:
print(er)
print("Error: File Could not be downloaded " + file)
return
def mkdir_p(path):
try:
os.makedirs(path)
except OSError as exc:
if exc.errno == errno.EEXIST and os.path.isdir(path):
pass
else:
raise
get_all_files_and_directories("/",filenameCV)
ftp.quit()
FTP 日志如下所示:
*get* '229 Entering Extended Passive Mode (|||58687|)\n'
*resP* '229 Entering Extended Passive Mode (|||58687|)'
*cmd* 'RETR sumNumbers.js'
*put* 'RETR sumNumbers.js\r\n'
*get* '150 opening data channel for file download from server of "/JavaScript/While-Loop/sumNumbers.js"\n'
*resP* '150 opening data channel for file download from server of "/JavaScript/While-Loop/sumNumbers.js"'
*get* '226 Successfully transferred "/JavaScript/While-Loop/sumNumbers.js"\n'
*resP* '226 Successfully transferred "/JavaScript/While-Loop/sumNumbers.js"'
*cmd* 'CWD /JavaScript/While-Loop-Advanced/'
*put* 'CWD /JavaScript/While-Loop-Advanced/\r\n'
*get* '250 CWD successful. "/JavaScript/While-Loop-Advanced" is current directory.\n'
*resP* '250 CWD successful. "/JavaScript/While-Loop-Advanced" is current directory.'
*cmd* 'CWD /JavaScript/While-Loop-Advanced/'
*put* 'CWD /JavaScript/While-Loop-Advanced/\r\n'
*get* '250 CWD successful. "/JavaScript/While-Loop-Advanced" is current directory.\n'
*resP* '250 CWD successful. "/JavaScript/While-Loop-Advanced" is current directory.'
*cmd* 'TYPE A'
*put* 'TYPE A\r\n'
*get* '200 Type set to A\n'
*resP* '200 Type set to A'
*cmd* 'EPSV'
*put* 'EPSV\r\n'
*get* '229 Entering Extended Passive Mode (|||52371|)\n'
*resP* '229 Entering Extended Passive Mode (|||52371|)'
*cmd* 'NLST'
*put* 'NLST\r\n'
*get* '150 opening data channel for directory listing of "/JavaScript/While-Loop-Advanced"\n'
*resP* '150 opening data channel for directory listing of "/JavaScript/While-Loop-Advanced"'
*get* '226 Successfully transferred "/JavaScript/While-Loop-Advanced"\n'
*resP* '226 Successfully transferred "/JavaScript/While-Loop-Advanced"'
*cmd* 'CWD /JavaScript/While-Loop-Advanced/05.3 PB-JS-While-Loop-Exercise.docx/'
*put* 'CWD /JavaScript/While-Loop-Advanced/05.3 PB-JS-While-Loop-Exercise.docx/\r\n'
*get* '550 CWD Failed. "/JavaScript/While-Loop-Advanced/05.3 PB-JS-While-Loop-Exercise.docx": directory not found.\n'
*resP* '550 CWD Failed. "/JavaScript/While-Loop-Advanced/05.3 PB-JS-While-Loop-Exercise.docx": directory not found.'
*cmd* 'CWD /JavaScript/While-Loop-Advanced/coins.js/'
*put* 'CWD /JavaScript/While-Loop-Advanced/coins.js/\r\n'
*get* '550 CWD Failed. "/JavaScript/While-Loop-Advanced/coins.js": directory not found.\n'
*resP* '550 CWD Failed. "/JavaScript/While-Loop-Advanced/coins.js": directory not found.'
550 File not found
Traceback (most recent call last):
File "ftp_client.py",line 34,in get_all_files_and_directories
ftp.cwd(path + file + "/")
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\python37_64\lib\ftplib.py",line 631,in cwd
return self.voidcmd(cmd)
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\python37_64\lib\ftplib.py",line 278,in voidcmd
return self.voidresp()
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\python37_64\lib\ftplib.py",line 251,in voidresp
resp = self.getresp()
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\python37_64\lib\ftplib.py",line 246,in getresp
raise error_perm(resp)
ftplib.error_perm: 550 CWD Failed. "/bamboo_inventory/yarn.lock": directory not found.
During handling of the above exception,another exception occurred:
Traceback (most recent call last):
File "ftp_client.py",line 41,in get_all_files_and_directories
open(os.path.join(destination + path,"wb").write)
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\python37_64\lib\ftplib.py",line 442,in retrbinary
with self.transfercmd(cmd,rest) as conn:
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\python37_64\lib\ftplib.py",line 399,in transfercmd
return self.ntransfercmd(cmd,rest)[0]
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\python37_64\lib\ftplib.py",line 365,in ntransfercmd
resp = self.sendcmd(cmd)
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\python37_64\lib\ftplib.py",line 273,in sendcmd
return self.getresp()
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\python37_64\lib\ftplib.py",in getresp
raise error_perm(resp)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)