我在C#中創建了一個用於通過FTP移動文件的進程。一部分工作 - 我的GetFileFTP。我可以從FTP服務器檢索一個文件並將副本放置在本地計算機上。我還想將文件複製到FTP服務器上的存檔文件夾,然後刪除FTP服務器上的原始文件。我創建瞭如下所示的函數CopyFileFTP和DeleteFileFTP。他們運行沒有錯誤,但該文件不會被複制或刪除。我還檢查了刪除功能中的StatusCode,一切看起來都很開心。你知道爲什麼這不起作用嗎?難道我只能在服務器上擁有隻讀權限嗎?如果我嘗試刪除並沒有權限,它會拋出一個錯誤,還是隻處理沒有任何操作的命令?如果我們有必要的權限,我的主管似乎不想問擁有FTP服務器的供應商,所以我會嘗試發佈這個問題。FTP複製和刪除不工作
public static bool CopyFileFTP(string sFileURI1, string sFileURI2, string sUserName, string sPassword)
{
bool bSuccess = false;
try
{
FtpWebRequest oRequest1 = (FtpWebRequest)WebRequest.Create(sFileURI1);
oRequest1.Credentials = new NetworkCredential(sUserName, sPassword);
oRequest1.Method = WebRequestMethods.Ftp.DownloadFile;
FtpWebResponse oResponse = (FtpWebResponse)oRequest1.GetResponse();
Stream oStream1 = oResponse.GetResponseStream();
MemoryStream oMemoryStream = new MemoryStream();
byte[] aChunk = new byte[4096];
int iBytesRead = 0;
do
{
iBytesRead = oStream1.Read(aChunk, 0, aChunk.Length);
if (iBytesRead > 0)
{
oMemoryStream.Write(aChunk, 0, iBytesRead);
}
else
{
break;
}
} while (iBytesRead > 0);
byte[] aBuffer = oMemoryStream.ToArray();
FtpWebRequest oRequest2 = (FtpWebRequest)WebRequest.Create(sFileURI2);
oRequest2.Credentials = new NetworkCredential(sUserName, sPassword);
oRequest2.Method = WebRequestMethods.Ftp.UploadFile;
Stream oStream2 = oRequest2.GetRequestStream();
oStream2.Write(aBuffer, 0, aBuffer.Length);
oStream2.Close();
oStream2.Dispose();
oStream1.Close();
oStream1.Dispose();
bSuccess = true;
}
catch (Exception oException)
{
LogEvent(oException.Message);
}
return bSuccess;
}
public static bool DeleteFileFTP(string sFileURI, string sUserName, string sPassword)
{
bool bSuccess = false;
try
{
FtpWebRequest oRequest = (FtpWebRequest)WebRequest.Create(sFileURI);
oRequest.Credentials = new NetworkCredential(sUserName, sPassword);
oRequest.Method = WebRequestMethods.Ftp.DeleteFile;
FtpWebResponse oResponse = (FtpWebResponse)oRequest.GetResponse();
string sWelcomeMessage = oResponse.WelcomeMessage;
string sStatusDescription = oResponse.StatusDescription;
bool bIsMutuallyAuthenticated = oResponse.IsMutuallyAuthenticated;
string sBannerMessage = oResponse.BannerMessage;
FtpStatusCode eStatusCode = oResponse.StatusCode;
string sExitMessage = oResponse.ExitMessage;
oResponse.Close();
bSuccess = true;
}
catch (Exception oException)
{
LogEvent(oException.Message);
}
return bSuccess;
}
只是個人觀察,匈牙利符號是可怕的!特別是在C#中 - 幾乎所有東西都是一個對象,在名稱前面放置一個「o」有點多餘! –
拉斯,我完全不同意,但你有權得到你的厭惡意見。駱駝案例符號很糟糕。 –