天天看点

wininet Ftp 相关

最近使用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;

}