gpt4 book ai didi

c# - 仁慈SSH.NET : How to delete nonempty directory?

转载 作者:行者123 更新时间:2023-11-30 13:55:11 24 4
gpt4 key购买 nike

我正在使用 Renci SSH.NET 访问 unix 服务器上的文件和文件夹。我想通过指定基本目录来删除整个目录树,但是当我调用 sftp.DeleteDirectory(destination) 时,只有传递一个空目录时该调用才会成功。

但是,我还希望能够删除包含文件或其他文件夹的目录。大多数 .NET 类会自动处理,如何在 SSH.NET 中完成?

最佳答案

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);
}

或者使用另一个 SFTP 库。

例如 WinSCP .NET assembly , 您可以使用 Session.RemoveFiles method可以递归删除目录。

// 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();
}

WinSCP GUI can generate a code template给你。

(我是 WinSCP 的作者)

关于c# - 仁慈SSH.NET : How to delete nonempty directory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36567463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com