本文迁移自本人网易博客,写于2015年4月15日,
FTP错误代码 - lysygyy的日志 - 网易博客 (163.com)
1、12003错误
指定用户未添加到有权限的组中;即指定用户没有权限。
2、CFtpFileFind.FindFile GetLastError 12110
(1)当递归获取ftp目录时,出现如题错误
void CFtpClients::FindNextFtpFileSub(CString sParentPath)
{
DWORD error = 0;
if (!m_pConnection)
{
return ;
}
CFtpFileFind finder(m_pConnection);
CString strWildPath = sParentPath + _T("/*");
BOOL bWorking = finder.FindFile(strWildPath);
if (!bWorking)
error = GetLastError();// 这里出现错误12110,该进程已在使用
CPlanDoc fileDoc;
CStringArray saDirPath;//添加要递归的目录的路径
while (bWorking)
{
bWorking = finder.FindNextFile();
if (finder.IsDirectory())
{
saDirPath.Add(sTempPath);
// finder.Close();// 加上该句就可以递归了;原因:在该函数中定义了CFtpFileFind对象,在下一次初始化之前必须close;但是这里如果close了,和该目录有相同父目录的其他目录或文件就读取不出来了;所以,想到了先将要递归的目录记录下来,稍后再循环判断;
//FindNextFtpFileSub(sTempPath);
}
}
finder.Close();
for (int i = 0; i < saDirPath.GetCount(); i++)
{
CString sTempPath = saDirPath.GetAt(i);
FindNextFtpFileSub(sTempPath);
}
}
(2)使用ftp连接服务器时,CIternetSession会抛出异常:
CInternetException:m_dwError,错误代码链接:
http://www.cnblogs.com/zzj8704/archive/2010/06/21/1761869.html
这几天总是抛出78,但是win32SDK的错误代码中没有。
(3)FindFile这个函数速度很慢,如果需要循环访问FTP服务器上的FTP文件夹,最好是,第一次先将这些文件夹记录 到一个 XML文件中;以后只需读取该XML文件即可,效率可以高出很很多,几乎忽略不计;但FindFile一次,大概 需要200微秒 ;有1000个文件夹,读1000次,需200秒;
3、连接ftp错误代码12031
在网上找到这个方法:把InternetConnect的第7个参数设置为INTERNET_FLAG_PASSIVE就可以了!
CInternetSession::GetFtpConnection
bPassive
Specifies passive or active mode for this FTP session. If set to TRUE, it sets the Win32 API dwFlag to INTERNET_FLAG_PASSIVE.
但仍然出现这个错误。而且这个函数耗时很长。
最后发现原来我导入过来的数据库的服务器IP地址是192.168.168.253,而我自己的是192.168.0.253,找不到这个IP地址,所以耗时很长。
4、12019
在使用ftp服务上传文件时,连接不上ftp服务器,一直提示错误“连接服务器重置”,错误代码是12019。
在计算机管理-服务和应用程序-IIS下应该有ftp服务才行,然后可以建立虚拟目录,添加用户,这只用户的读写权限。原来我之前用的网站默认程序都是http的,根本就不是ftp的。