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