2016-04-12 49 views
1

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?

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