【问题标题】:Deleting the folder and sub folders in FTP server删除 FTP 服务器中的文件夹和子文件夹
【发布时间】:2025-08-26 09:15:01
【问题描述】:

我在 FTP 服务器中创建了带有年份、月份和日期的文件夹,在登录到服务器后,我们可以看到在年份创建的文件夹,当我单击该年份时,它显示月份,当我单击月份时,它显示日期。现在我需要删除这个文件夹。

下面是我在 FTP 服务器中删除文件夹的代码

FtpWebResponse responseFileDelete = (FtpWebResponse)ftpRequest.GetResponse();

System.dll 中出现“System.Net.WebException”类型的未处理异常
附加信息:远程服务器返回错误:(550) 文件不可用(例如,找不到文件,无法访问)。

你能帮我删除一个文件夹吗?

【问题讨论】:

  • 谁能帮我解决这个问题

标签: c# winforms ftp ftpwebrequest


【解决方案1】:
  1. 您为DeleteFile 调用组装的URL 错误。

    与:

    path = "ftp://ftp.example.com/" + "/" + ff;
    string server = "ftp://ftp.example.com/";
    

    ftpURL + "/" + ftpDirectoryftp://ftp.example.com/ftp://ftp.example.com//dir,而你想要的是 ftp://ftp.example.com//dir 或者 ftp://ftp.example.com/dir

    只使用ftpDirectory

    FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(ftpDirectory);
    
  1. 无论如何,您都无法删除带有WebRequestMethods.Ftp.DeleteFile 的文件夹。你必须使用WebRequestMethods.Ftp.RemoveDirectory

    ftpRequest.Method = WebRequestMethods.Ftp.RemoveDirectory;
    

    但请注意,即使.RemoveDirectory 也只能删除一个空目录。

    您必须先递归删除文件夹的文件和子文件夹,然后才能删除文件夹本身。

    使用FtpWebRequest 实现递归并不容易,特别是因为它不支持MLSD 命令(这是区分文件和文件夹的唯一可靠方法)。详情见我对C# Download all files and subdirectories through FTP的回复。


    或者,使用另一个支持递归操作的 FTP 库。

    例如使用WinSCP .NET assembly,您可以使用Session.RemoveFiles 在一次调用中删除文件夹及其内容:

    SessionOptions sessionOptions = new SessionOptions
    {
        Protocol = Protocol.Ftp,
        HostName = "ftp.example.com",
        UserName = "username",
        Password = "mypassword",
    };
    
    using (Session session = new Session())
    {
        session.Open(sessionOptions);
        session.RemoveFiles("/" + ff);
    }
    

    (我是 WinSCP 的作者)

【讨论】: