我在C#中创建了一个用于通过FTP移动文件的进程。一部分是工作 - 我的GetFileFTP。我可以从FTP服务器检索文件并将副本放在我的本地计算机上。我还想将文件复制到FTP服务器上的存档文件夹,然后删除FTP服务器上的原始文件。我创建了如下所示的CopyFileFTP和DeleteFileFTP函数。它们运行时没有错误,但文件不会被复制或删除。我还检查了delete函数中的StatusCode,一切看起来都很开心。你知道为什么这不起作用吗?可能是我只在服务器上拥有只读权限吗?如果我尝试删除并且没有权限会抛出错误,还是只是处理命令而不执行任何操作?如果我们拥有必要的权限,我的主管似乎不想询问拥有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;
}

答案 0 :(得分:1)
对我来说很好看;代码几乎与MSDN文档FtpWebRequest完全一样。
我同意这很可能是凭证。
顺便提一下,您是否尝试过使用具有相同凭据的传统FTP客户端,看看您是否可以手动执行这些操作?
此外,您怀疑没有因没有权限而抛出异常;您可以捕获异常,但这主要来自实际的连接错误。您需要处理响应的状态以找出FTP服务器告诉您的内容。