非淡泊无以明志,非宁静无以致远 -心静如止水,动于静

FTP 之 550 permission denied

做案子時﹐將WinInet.dll封裝﹐用C#調用﹐做了四個函數﹐分別是上傳﹐下載﹐刪除﹐清空文件夾。在開發環境中測試沒有任何問題﹐但拿到正式環境中卻出現"550 /c:/dh/MPF.dir/ABC"不存在的錯誤。但實際上的FTP Home 目錄是MPF.dir, 可是卻出現了/c:/dh/之類的東東。

經過排查﹐開發環境用的是IIS來做的FTP, 而正式環境用的是Server-U做FTP Server. 一定出在配置上﹐而且不是server的問題﹐是編程的問題。

跟蹤后﹐發現是在setCurrentDirectory發生錯誤。設斷點在這里﹐執行前發現當前目錄已經在"/c:/dh/", 原來的程式有一條指令是

ftpFunc.SetCurrentDirectory("/"); // set root folder, 因為"/c:/dh/"的確沒有權限﹐所有出錯誤﹐那為什么當前的default目錄是"/c:/dh"呢?原來server-U在配置當前用戶時有一個選項是: lock user in home directory. 如果沒有被勾選上﹐則表示當前用戶登錄成功后﹐他的home directory是物理路徑. 如果被勾上﹐則他的home directory是"/", 所以才會產生permission denied錯誤.

改正﹕在登錄的時候﹐就把當前用戶的home directory記錄下來﹐然后在那些函數設定目錄的時候調用:

ftpFunc.SetCurrentDirectory(rootPath); // set root folder就可以了

posted @ 2008-08-25 17:48  烟雨客  阅读(4735)  评论(1编辑  收藏  举报