【问题标题】:Create folder on ftp在 ftp 上创建文件夹
【发布时间】:2018-02-09 18:20:44
【问题描述】:

我正在使用方法在 ftp 上创建文件夹,如果文件夹已经存在,我想获取异常如何覆盖现有文件夹

using System; using System.Net;

class Test {
    static void Main()
    {
        WebRequest request = WebRequest.Create("ftp://host.com/directory");
        request.Method = WebRequestMethods.Ftp.MakeDirectory;
        request.Credentials = new NetworkCredential("user", "pass");
        using (var resp = (FtpWebResponse) request.GetResponse())
        {
            Console.WriteLine(resp.StatusCode);
        }
    } }

是“远程服务器返回错误(550)文件未找到”

【问题讨论】:

    标签: c# ftp


    【解决方案1】:

    嗯,“如果文件夹已经存在,我想获得异常”和“如何让它覆盖现有文件夹”是两个相反的问题。

    无论如何,前几天我刚刚实现了执行此操作的代码。只需先检查目录是否已经存在。然后据此做出回应。尝试创建一个已经存在的目录是没有意义的。

    如果您需要以某种方式覆盖它,请在创建新目录之前删除现有目录。

    您可以在文章An FtpClient Class and WinForm Control 中看到我为此编写的代码,尽管它只会覆盖现有内容。

    【讨论】:

    • 我无法访问我现在使用的代码,但我认为我使用了 WebRequestMethods.Ftp.ListDirectory 之类的东西并测试了错误。如果没有错误,我可以假设该目录存在。
    • 是的,尝试列出 try 块中的目录,如果 webException.Message.Contains("550") 则目录不存在
    【解决方案2】:

    您可能需要考虑一些现有的 ftp 库。我一直在使用它并取得了巨大的成功。它是一个 FTP 客户端库,为 .NET Framework 2.0 中的 FTPrequest 提供高级 FTP 功能。

    它有一个用于检查目录是否存在和创建目录的 API。

    代码@http://ftpclient.codeplex.com/

    文章@http://www.codeproject.com/KB/IP/FtpClient.aspx

    【讨论】:

      【解决方案3】:

      我在解决方案中使用这个函数

      private void createFolder(string ftpUName, string ftpPWord)
          {
                  WebRequest ftpRequest = WebRequest.Create("ftp://mrhotro.ad/new_sc");
                  ftpRequest.Method = WebRequestMethods.Ftp.MakeDirectory;
                  ftpRequest.Credentials = new NetworkCredential(ftpUName, ftpPWord);
          }
      

      【讨论】:

      • 为什么文件夹名称不在 args 中?
      【解决方案4】:

      您不能覆盖现有文件夹...我什至不确定这可能有什么好处。

      简而言之,您需要捕获异常并决定要做什么。要么保留它(毕竟它已经存在......),要么您需要删除现有文件夹并尝试重新创建它。

      我不记得您是否可以删除当前包含文件的文件夹。如果不能,那么您也必须删除这些文件。

      【讨论】:

      • 有趣的是,他报告说他收到“找不到文件”错误。
      • @Klaus:是的,我自己也觉得这有点奇怪