SSH.NET库不支持任何递归操作。因此,递归删除也不可用。
您必须使用该SftpClient.ListDirectory方法来递归列出所有文件和子文件夹,并将它们一个一删除。
private static void DeleteDirectory(SftpClient client, string path)
{
foreach (SftpFile file in client.ListDirectory(path))
{
if ((file.Name != ".") && (file.Name != ".."))
{
if (file.IsDirectory)
{
DeleteDirectory(client, file.FullName);
}
else
{
client.DeleteFile(file.FullName);
}
}
}
client.DeleteDirectory(path);
}
Run Code Online (Sandbox Code Playgroud)
或使用另一个SFTP库。
例如,对于WinSCP .NET程序集,您可以使用可以递归删除目录的Session.RemoveFiles方法。
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Sftp,
HostName = "example.com",
UserName = "user",
Password = "mypassword",
SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx...="
};
using (Session session = new Session())
{
// Connect
session.Open(sessionOptions);
// Delete the directory recursively
session.RemoveFiles("/directory/to/delete").Check();
}
Run Code Online (Sandbox Code Playgroud)
(我是WinSCP的作者)