2010-04-02 11 views
13

कोई भी जानता है कि Tamir Gal's SharpSSH का उपयोग कर किसी SFTP सर्वर से फ़ाइल को कैसे हटाया जाए? मैं अन्य कार्यक्षमता को पूरा करने में सक्षम हूं लेकिन हटाना। अग्रिम में धन्यवाद।SharpSSH का उपयोग कर प्रोग्रामिंग रूप से एक SFTP सर्वर से फ़ाइल को कैसे हटाएं?

+0

इस प्रश्न के लिए एक लंबे समय तक अनुवर्ती फॉलो-अप। मैंने इसे कुछ अपडेट में जोड़ा जो मैंने पुस्तकालय को फिर से संकलित करने से बचने के लिए https://bitbucket.org/mattgwagner/sharpssh पर किया था। – MattGWagner

उत्तर

14

इसे पूरा करने के लिए आपको आवश्यक कार्यक्षमता का पर्दाफाश करने के लिए SharpSSH असेंबली को संशोधित करने की आवश्यकता होगी।

स्रोत कोड और खुले $ \ SharpSSH-1.1.1.13.src प्राप्त \ SharpSSH \ Sftp.cs

सम्मिलित निम्नलिखित वर्ग के अंत से पहले कोड की तर्ज:

public void Delete(string path) 
{ 
    SftpChannel.rm(path); 
} 

पुनः संकलित करें और अपनी परियोजना में recompiled डीएलएल का संदर्भ लें। अब आप एसएफटीपी सर्वर पर फाइलों को हटाने में सक्षम होंगे।

+3

धन्यवाद! इस पर ठोकर खाई और यह पूरी तरह से काम करता है। किसी भी व्यक्ति के लिए बस एक और त्वरित युक्ति जो इसे स्वयं संकलित करना चाहता है, SharpSSH.dll नामक एक आसान असेंबली के साथ समाप्त होने के लिए निम्नलिखित पोस्ट-बिल्ड ILMerge कमांड का उपयोग करना उपयोगी है: 'ilmerge/target: library/out: "$ (TargetDir) SharpSSH.dll "/ v2" $ (TargetDir) Tamir.SharpSSH.dll "" $ (TargetDir) DiffieHellman.dll "" $ (TargetDir) Org.Mentalis.Security.dll "' – mattmc3

+0

मुझे भी मदद मिली। बहुत बहुत धन्यवाद!! – Vbp

6

वैसे आप भी SshExec वर्ग का उपयोग कर सकते हैं और फिर "RunCommand" पद्धति का उपयोग करके "rm" कमांड निष्पादित। इस तरह आपको एक नया डीएल पुन: कंपाइल करना और निर्माण करना नहीं है।

+0

धन्यवाद! इसने मुझे पुस्तकालय को संशोधित करने से बचाया। –

21

SshExec वर्ग मेरे लिए काम नहीं किया, लेकिन एक छोटे से प्रतिबिंब जादू काम किया:

var prop = sftp.GetType().GetProperty("SftpChannel", BindingFlags.NonPublic | BindingFlags.Instance); 
var methodInfo = prop.GetGetMethod(true); 
var sftpChannel = methodInfo.Invoke(sftp, null); 
((ChannelSftp) sftpChannel).rm(ftpPath); 
+1

यह एक आकर्षण की तरह काम करता है .. धन्यवाद :-) – karpanai

+1

वाह, क्या एक बदसूरत हैक। इतना अच्छा sftp क्लाइंट फ़ाइलों को हटा नहीं सकता है? – t3chb0t

0

Tamir के dll का उपयोग करते हुए मैं नीचे दिए गए कोड का उपयोग कर नष्ट करने के लिए सुझाव है। इस तरह, आपको तामीर के डीएल को संशोधित करने की आवश्यकता नहीं है, जबकि नीचे दिए गए कोड को आपकी कक्षा में लिखा जा सकता है।

string fromFile = "https://stackoverflow.com/a/b/MyFile.txt" 
SshExec se = new SshExec(host, username, password); 
se.Connect(port); 
se.RunCommand("rm " + fromFile); 
संबंधित मुद्दे