2009-05-13 14 views
56

सी # का उपयोग कर एफ़टीपी सर्वर पर निर्देशिका बनाने का एक आसान तरीका क्या है?मैं सी # का उपयोग कर FTP सर्वर पर निर्देशिका कैसे बना सकता हूं?

using (WebClient webClient = new WebClient()) 
{ 
    string filePath = "d:/users/abrien/file.txt"; 
    webClient.UploadFile("ftp://10.128.101.78/users/file.txt", filePath); 
} 

हालांकि, अगर मैं users/abrien पर अपलोड करना चाहते, मैं एक WebException कह फ़ाइल अनुपलब्ध है मिलती है:

मैं इस तरह एक पहले से ही मौजूदा फ़ोल्डर के लिए फाइल को अपलोड करने के लिए कैसे पता लगा। मुझे लगता है कि ऐसा इसलिए है क्योंकि मुझे अपनी फ़ाइल अपलोड करने से पहले नया फ़ोल्डर बनाना होगा, लेकिन WebClient में ऐसा करने के लिए कोई तरीका नहीं प्रतीत होता है।

उत्तर

90

का उपयोग WebRequestMethods.Ftp.MakeDirectory की विधि के साथ करें।

उदाहरण के लिए:

using System; 
using System.Net; 

class Test 
{ 
    static void Main() 
    { 
     WebRequest request = WebRequest.Create("ftp://host.com/directory"); 
     request.Method = WebRequestMethods.Ftp.MakeDirectory; 
     request.Credentials = new NetworkCredential("user", "pass"); 
     using (var resp = (FtpWebResponse) request.GetResponse()) 
     { 
      Console.WriteLine(resp.StatusCode); 
     } 
    } 
} 
+1

HTTP प्रॉक्सी के माध्यम से ऐसा करने के तरीके पर कोई विचार? (FtpWebRequest द्वारा समर्थित नहीं) –

+0

वास्तव में नहीं, मुझे डर है। HTTP प्रॉक्सी पर काम करने के अपने दिनों के बारे में मुझे याद है, वे HTTP विधियों को एफ़टीपी कमांड में अनुवाद करते हैं - और मैं समकक्ष HTTP विधि के बारे में नहीं सोच सकता :( –

+12

क्या एक वेबरवेस्ट के साथ नेस्टेड निर्देशिका बनाना संभव है? मैं बनाने की कोशिश कर रहा हूं "ftp://host.com/ExistingFolder/new1/new2", लेकिन मुझे "वेबएक्सप्शन - 550" (फ़ाइल नहीं मिली, कोई पहुंच नहीं है) और मौसम नहीं पता यह कारण है। –

16

कुछ इस तरह:

// remoteUri points out an ftp address ("ftp://server/thefoldertocreate") 
WebRequest request = WebRequest.Create(remoteUri); 
request.Method = WebRequestMethods.Ftp.MakeDirectory; 
WebResponse response = request.GetResponse(); 

(थोड़ी देर हो चुकी कैसे अजीब।।)

+14

+1 जॉन स्कीट के पीछे सिर्फ एक सेकंड होने के लिए। – Rudi

25

यहाँ जवाब है आप नेस्ट निर्देशिका

बनाना चाहते हैं

यह जांचने का कोई साफ तरीका नहीं है कि कोई फ़ोल्डर ftp पर मौजूद है या नहीं, इसलिए आपको लूप और क्रिएट करना है ई सब समय

public static void MakeFTPDir(string ftpAddress, string pathToCreate, string login, string password, byte[] fileContents, string ftpProxy = null) 
    { 
     FtpWebRequest reqFTP = null; 
     Stream ftpStream = null; 

     string[] subDirs = pathToCreate.Split('/'); 

     string currentDir = string.Format("ftp://{0}", ftpAddress); 

     foreach (string subDir in subDirs) 
     { 
      try 
      { 
       currentDir = currentDir + "/" + subDir; 
       reqFTP = (FtpWebRequest)FtpWebRequest.Create(currentDir); 
       reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory; 
       reqFTP.UseBinary = true; 
       reqFTP.Credentials = new NetworkCredential(login, password); 
       FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); 
       ftpStream = response.GetResponseStream(); 
       ftpStream.Close(); 
       response.Close(); 
      } 
      catch (Exception ex) 
      { 
       //directory already exist I know that is weak but there is no way to check if a folder exist on ftp... 
      } 
     } 
    } 
+0

बहुत अच्छा और उपयोगी। –

+0

पिछले दो पैरामीटर क्या कर रहे हैं? इन्हें विधि निकाय में उपयोग नहीं किया जाता है। मैंने अंतिम टी के बिना विधि का उपयोग किया wo पैरामीटर, लेकिन केवल 2 स्तर तक नेस्टेड निर्देशिका बनाने का प्रबंधन कर सकता है, उसके बाद मुझे 505 त्रुटि मिली। –

+0

यह त्रुटि देता है जैसे: रिमोट सर्वर ने एक त्रुटि लौटा दी: (550) फ़ाइल अनुपलब्ध (उदा।, फ़ाइल नहीं मिली, कोई पहुंच नहीं है)। कृपया मेरी सहायता करें .. –

-1

एक FTP निर्देशिका बनाना में आंतरिक संरचना एक फ़ोल्डर के बाद से आप गंतव्य फ़ोल्डर मौजूद है या नहीं, इसकी जांच करने के लिए है जटिल हो सकता है। निर्देशिका को जांचने और बनाने के लिए आपको एक एफ़टीपी लाइब्रेरी का उपयोग करने की आवश्यकता हो सकती है। आप इसे देख सकते हैं: http://www.componentpro.com/ftp.net/ और यह उदाहरण: http://www.componentpro.com/doc/ftp/Creating-a-new-directory-Synchronously.htm

संबंधित मुद्दे

 संबंधित मुद्दे