【问题标题】:FTP Copy And Delete Not WorkingFTP复制和删除不起作用
【发布时间】:2015-10-08 22:02:37
【问题描述】:

我在 C# 中创建了一个旨在通过 FTP 移动文件的进程。一部分正在工作 - 我的 GetFileFTP。我可以从 FTP 服务器检索文件并将副本放在本地计算机上。我还想将文件复制到 FTP 服务器上的存档文件夹,然后删除 FTP 服务器上的原始文件。我创建了如下所示的函数 CopyFileFTP 和 DeleteFileFTP。它们运行没有错误,但文件不会被复制或删除。我还检查了删除函数中的 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;
        }

【问题讨论】:

  • 只是个人观察,匈牙利符号很糟糕!尤其是在 C# 中 - 几乎所有东西都是一个对象,在名称前面加一个 'o' 有点多余!
  • Russ,我完全不同意,但你有权发表你讨厌的意见。驼峰式表示法很糟糕。

标签: c# ftp


【解决方案1】:

对我来说看起来不错;该代码几乎与 MSDN 文档 FtpWebRequest 完全相同。

我同意这很可能是凭据。

顺便说一句,您是否尝试过使用具有相同凭据的传统 FTP 客户端并查看是否可以手动执行这些操作?

此外,您似乎怀疑没有因没有权限而引发的异常;您可以捕获异常,但这主要来自实际的连接错误。您需要处理响应的状态以了解 FTP 服务器告诉您的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-18
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多