删除FTP服务器中的文件夹和子文件夹

3 c# ftp ftpwebrequest winforms

我在FTP服务器中创建了文件夹,其中包含登录到服务器的年份,月份和日期,我们可以看到当年点击它显示月份时创建的文件夹,当我点击月份时显示日期.现在我需要删除此文件夹.

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

FtpWebResponse responseFileDelete = (FtpWebResponse)ftpRequest.GetResponse();
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*ryl 5

  1. 您为该DeleteFile呼叫汇总的URL 是错误的.

    附:

    path = "ftp://ftp.example.com/" + "/" + ff;
    string server = "ftp://ftp.example.com/";
    
    Run Code Online (Sandbox Code Playgroud)

    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);
    
    Run Code Online (Sandbox Code Playgroud)
  1. WebRequestMethods.Ftp.DeleteFile无论如何都无法删除文件夹.你必须使用WebRequestMethods.Ftp.RemoveDirectory.

    ftpRequest.Method = WebRequestMethods.Ftp.RemoveDirectory;
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    使用递归实现FtpWebRequest并不容易,特别是因为它不支持MLSD命令(区分文件和文件夹的唯一可靠方法是什么).有关详细信息,请参阅我对C#的回答通过FTP下载所有文件和子目录.


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

    例如,使用WinSCP .NET程序集,您可以使用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);
    }
    
    Run Code Online (Sandbox Code Playgroud)

    (我是WinSCP的作者)