Unix sunucusundaki dosya ve klasörlere erişmek için Renci SSH.NET kullanıyorum. Tüm dizin ağacını temel dizini belirterek silmek istiyorum, ancak sftp.DeleteDirectory(destination)
'u aradığımda, bu çağrı yalnızca boş bir dizini iletirsem başarılı olur. Bununla birlikte, dosyaları veya ek klasörleri içeren dizinleri de silebilmek istiyorum. Çoğu .NET sınıfı bunu otomatik olarak halleder, SSH.NET'te nasıl yapılabilir?Renci SSH.NET: Adsız dizini nasıl silebilirim?
1
A
cevap
1
SSH.NET kitaplığı, herhangi bir özyinelemeyi desteklemiyor. Yani özyinelemeli silme de mevcut değildir.
Tüm dosyaları ve alt klasörleri yinelemeli olarak listelemek ve bunları tek tek silmek için SftpClient.ListDirectory
yöntemini kullanmanız gerekir. Ya da başka bir SFTP kütüphanesi kullanın.
Örneğin, WinSCP .NET assembly ile, bir dizini yinelemeli olarak indirebilen Session.RemoveFiles
method'u kullanabilirsiniz.
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Sftp,
HostName = "example.com",
UserName = "user",
Password = "mypassword",
SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
};
using (Session session = new Session())
{
// Connect
session.Open(sessionOptions);
// Delete the directory recursively
session.RemoveFiles("/directory/to/delete").Check();
}
(Ben WinSCP yazarı olduğum)
1
yerine
Kod şey görünebilir -r veya rm -rf Sftp rm kullanmanın ssh komutu yürütülürken deneyin bunun gibi: Renci.SshClient ssh1 = new SshCLient("server","user","password"); ssh1.connect(); ssh1.RunCommand("cd LandingZone;rm -rf <directoryName>"); ssh1.Disconnect();