2009-01-16 3 views
6

होने एक फ़ाइल की एक प्रतिलिपि बनाने के लिए कैसे vb.netएक फ़ाइल होने लंबाई की एक प्रतिलिपि बनाने के लिए लंबाई से अधिक 260 वर्ण

का उपयोग कर हम एक प्रतिलिपि बनाने के लिए कोशिश कर रहे हैं जब फ़ाइल नाम सहित से अधिक 260 वर्ण File.Copy विधि का उपयोग करके यह अपवाद फेंकता है:

"निर्दिष्ट पथ, फ़ाइल का नाम, या दोनों बहुत लंबा हैं। पूरी तरह से योग्य फ़ाइल नाम 260 वर्णों से कम होना चाहिए, और निर्देशिका का नाम 248 से कम होना चाहिए वर्ण।"

है यह संभव है, तो मदद कृपया ...

उत्तर

2

नाम छोटा के लिए सुझाव दिए गए हैं ... शीर्षक अनुभाग देखें: पर "कारण 4 फ़ाइलें रास्तों कि MAX_PATH पात्रों की तुलना में गहरी हैं में मौजूद" http://support.microsoft.com/?kbid=320081#

+0

इसका एक विंडोज प्रतिबंध है। यदि फ़ाइलपैथ 260 वर्णों से अधिक है, तो अधिकांश फाइल ऑपरेशंस समान त्रुटियों को फेंक देंगे .. यहां तक ​​कि फ़ाइल नाम बदलने के लिए मुझे लगता है कि – Gishu

+0

मैट का उत्तर ('CopyFile' का उपयोग करें) मेरा से बेहतर है। – ChrisW

9

आप MAX_PATH सीमा में चल रहे हैं। जैसा कि आप के आस-पास के काम के रूप में सीधे kernel /.dl के CopyFile फ़ंक्शन पर P/Invoke करने में सक्षम होना चाहिए और MAX_PATH समस्या को मारने से रोकने के लिए गंतव्य पथ के सामने "\\? \" उपसर्ग का उपयोग करना चाहिए।

ध्यान दें कि जब आप फ़ाइल को कॉपी करने में सक्षम होते हैं तो अधिकांश ऐप्स इसे खोलने में सक्षम नहीं होंगे क्योंकि वे MAX_PATH तक सीमित हैं।

समस्या का एक अच्छा सिंहावलोकन यहां पाया जा सकता: http://blogs.msdn.com/bclteam/archive/2007/02/13/long-paths-in-net-part-1-of-3-kim-hamilton.aspx

पी के कुछ उदाहरण कोड/इन सी # का उपयोग कर तरीकों में लागू भाग 2, यहाँ में पाया जा सकता: http://blogs.msdn.com/bclteam/archive/2007/03/26/long-paths-in-net-part-2-of-3-long-path-workarounds-kim-hamilton.aspx

पुस्तकालय कि schnaader linked ऐसा लगता है कि यह आपको P32/kernel32.dll में Invoking की समस्या बचाएगा, यह सुनिश्चित नहीं है कि आप बाहरी डीएल पर निर्भरता लेना चाहते हैं या नहीं।

0

क्या मैं आमतौर पर इस उदाहरण में क्या है:

1) गणना फ़ाइल नाम length

2) यदि FileNameLength > 259 फिर नया नाम संभाल और फिर एक साथ फाइल कॉपी करने के लिए पर्याप्त फ़ाइल नाम फसल फसल गंतव्य नाम।

1

मुझे इस मुद्दे के बारे में समाधान मिला।

आर & डी पर मैंने पाया कि हम निर्दिष्ट पथ निर्देशिका का नाम बदल सकते हैं, भले ही कुल लंबाई 260 वर्णों से अधिक हो और फिर हम निर्दिष्ट स्थान से फ़ाइल को हमारे स्कैनिंग उद्देश्य के लिए नए (अस्थायी) स्थान पर कॉपी कर सकें। और अंत में हम फिर से मूल पथ के साथ फ़ाइल पथ नाम का नाम बदल सकते हैं।

2

आपको यहां पर complete library मिलेगा जो लंबे फ़ाइल नामों का समर्थन करता है।

0

jdelimon पहले से ही Delimon.Win32.IO लाइब्रेरी की ओर इशारा करता है लेकिन आखिरी बार उन्होंने अपडेट किया था 2012 (.NET 2.0)। यहां एक और लाइब्रेरी है: AlphaFS

वे नेट 4.5.2 (2 9/6/2017 को) तक जाते हैं। मैंने एक्सेल द्वारा COM एड-इन के रूप में उपयोग करने के लिए बहुत कम # सी प्रोग्राम का उपयोग किया। this link in how to create a program और this link for the copy-program देखें। आपको केवल .NET 4.5 पर प्रोग्राम असाइन करना होगा, अल्फाफेस.dll के संदर्भ को 4 के लिए जोड़ें।5 और के साथ using System.IO को प्रतिस्थापित करें।

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

  • कोई संबंधित समस्या नहीं^_^