最近使用wininet的Ftp功能时,在目录设置时总是出错;
比如已存在目录:车辆\自行车,但使用FtpFindFirstFile()时返回FALSE;
原因:在之前应该先执行语句:FtpSetCurDirectory("\\")将当前目录设置成服务器根目录,这样就能成功了!
//设置上传目录
BOOL CMyGdalInfo_GuiDlg::SetDirectory(CString remoteDir)
{
//格式化目录 remoteDir
CString tempDir;
tempDir = remoteDir;
//设置为用户指定的目录
if (NULL == hConnect)
return FALSE;
if(tempDir.IsEmpty())
tempDir = "\\";
//设置根目录为当前目录
if(!FtpSetCurrentDirectory(hConnect,"\\"))
{
MessageBox("设置根目录为当前目录时出错!","错误提示",MB_OK|MB_DEFBUTTON1 |MB_ICONERROR |MB_SYSTEMMODAL);
return FALSE;
}
//查找是否存在指定目录
WIN32_FIND_DATA findData;
if(FtpFindFirstFile(hConnect,tempDir,&findData,0,0))
{
if(!FtpSetCurrentDirectory(hConnect,tempDir))
{
MessageBox("目录已存在,设置当前目录时出错!","错误提示",MB_OK|MB_DEFBUTTON1 |MB_ICONERROR |MB_SYSTEMMODAL);
return FALSE;
}
}
else //目录不存在,直接创建
{
if(FtpCreateDirectory(hConnect,tempDir))
{
if(!FtpSetCurrentDirectory(hConnect,tempDir))
{
MessageBox("目录创建成功,设置当前目录时出错!","错误提示",MB_OK|MB_DEFBUTTON1 |MB_ICONERROR |MB_SYSTEMMODAL);
return FALSE;
}
}
else
{
DWORD p = GetLastError(); //p=12003 该目录已存在产生的错误信息
if(12003 == p) //解决中文目录不能正确识别的问题 12003:目录已存在
{
if(!FtpSetCurrentDirectory(hConnect,tempDir))
{
MessageBox("目录已存在,设置当前目录时出错!","错误提示",MB_OK|MB_DEFBUTTON1 |MB_ICONERROR |MB_SYSTEMMODAL);
return FALSE;
}
}
else
{
DWORD a,b;
char c[256];
InternetGetLastResponseInfoA(&a,c,&b);
CString error;
error.Format("目录创建失败,错误信息如下:\r\n%ld\r\n%s",p,c);
MessageBox(error,"错误提示",MB_OK|MB_DEFBUTTON1 |MB_ICONERROR |MB_SYSTEMMODAL);
return FALSE;
}
}
}
return TRUE;
}