天天看點

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;

}