2011-08-25 8 views
11

मैं विंडोज एक्सप्लोरर से सूची बॉक्स में ड्रैग फ़ाइलों के लिए सी # कोड विकसित करने में सफल रहा।विंडोज एक्सप्लोरर से सूची में ब्राउज़ करने के लिए एक फ़ोल्डर को खींचें और ड्रॉप करें #

// Drag and Drop Files to Listbox 
    private void listBox1_DragEnter(object sender, DragEventArgs e) 
    { 
     if (e.Data.GetDataPresent(DataFormats.FileDrop, false)) 
      e.Effect = DragDropEffects.All; 
     else 
      e.Effect = DragDropEffects.None; 
    } 

    private void listBox1_DragDrop(object sender, DragEventArgs e) 
    { 
     string[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false); 
     foreach (string fileName in files) 
     { 
      listBox1.Items.Add(fileName); 
     } 
    } 

अगर मैं लिस्टबॉक्स के लिए एक फ़ोल्डर खींचते हैं, सभी फाइलों को जो फ़ोल्डर के अंदर कर रहे हैं लिस्टबॉक्स आइटम के लिए जोड़ा जा करने के लिए।

यदि कोई मुझे उपर्युक्त कार्य के लिए कोड स्निपेट प्रदान कर सकता है तो यह मेरे लिए बहुत उपयोगी होगा।

अग्रिम धन्यवाद।

उत्तर

2

अगर fileName एक निर्देशिका है आप सभी फ़ाइलें (और उपनिर्देशिका)

आप इस कोड पर एक नज़र हो सकता है के माध्यम से एक DirectoryInfo वस्तु और पाश बना सकते हैं:

http://weblogs.asp.net/israelio/archive/2004/06/23/162913.aspx

(हैं तो आपको DirectoryInfo ऑब्जेक्ट का उपयोग करने के लिए, आप Directory कक्षा

12

से स्थिर विधियों का भी उपयोग कर सकते हैं DragEnter के लिए आपका कोड फ़ोल्डर के लिए लागू होता है।

DragDrop ईवेंट में, आप फ़ाइलपैथ और फ़ोल्डर पथ को उसी तरह पुनर्प्राप्त करते हैं। यदि आप फ़ाइलों और फ़ोल्डरों के संयोजन खींचते हैं, तो वे सभी आपके files सरणी में दिखाई देंगे। आपको बस यह निर्धारित करने की आवश्यकता है कि पथ फ़ोल्डर्स हैं या नहीं।

निम्न कोड सभी फ़ोल्डरों की जड़ से सभी फ़ाइलों के सभी पथों को पुनर्प्राप्त कर देगा, और सभी फ़ाइलों के पथ गिर गए।

private void listBox1_DragDrop(object sender, DragEventArgs e) 
    { 
     List<string> filepaths = new List<string>(); 
     foreach (var s in (string[])e.Data.GetData(DataFormats.FileDrop, false)) 
     { 
      if (Directory.Exists(s)) 
      { 
       //Add files from folder 
       filepaths.AddRange(Directory.GetFiles(s)); 
      } 
      else 
      { 
       //Add filepath 
       filepaths.Add(s); 
      } 
     } 
    } 

ध्यान दें कि फ़ोल्डरों की जड़ में केवल फाइलें ही एकत्र की जाएंगी। यदि आपको फ़ोल्डर पेड़ में सभी फाइलें प्राप्त करने की आवश्यकता है, तो आपको उन सभी को इकट्ठा करने के लिए थोड़ा सा रिकर्सन करना होगा।

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