2013-02-19 9 views
5

मेरा खुला स्रोत software स्थानीय डेस्कटॉप पर रिमोट फ़ोल्डर सिंक्रनाइज़ करता है। रिमोट फ़ोल्डर अल्फ्रेस्को पर हो सकता है, जहां पथ की लंबाई की कोई सीमा नहीं है (/root/very/very/very/long/name.txt)।सी # आई/ओ लाइब्रेरी जो लंबे पथ का समर्थन करती है (PathTooLongException को हल करने के लिए)

जब अनुप्रयोग मैं System.IO.File.OpenWrite और System.IO.Stream.Write इस्तेमाल किया विकसित करने, लेकिन यह है कि they don't support paths over a few hundred characters है, इसलिए उन PathTooLongException तरह त्रुटियों की रिपोर्ट जब लंबे रास्तों साथ काम करना।

UNC पथों को पूरी तरह से टालना चाहिए, क्योंकि वे कुछ अनुप्रयोगों के साथ असंगतता का कारण बनते हैं।

इस मामले में कौन सी लाइब्रेरी/कोड का उपयोग किया जाना चाहिए?

यह खुला स्रोत सी # होना चाहिए।

+0

मैं सिर्फ देखा है कि आप "अपनी खुद की उत्तर पोस्ट" सुविधा नहीं किया। मैं आपको यह शर्त लगाने के लिए तैयार हूं कि थोड़ी देर के लिए अपने सिर को तेज़ कर रहे हैं और अब आप यह साझा करना चाहते हैं कि आपने इसे कैसे हल किया है ताकि दूसरों को पीड़ित न हो। [मैं वहां गया हूं] (http://stackoverflow.com/q/11346554/80274)। –

उत्तर

1

".NET 2.0 Workaround for PathTooLongException" (आलेख + कोड)।

कोड प्रोजेक्ट ओपन लाइसेंस (सीपीओएल) के तहत लाइसेंस प्राप्त है, जो खुला स्रोत apparently नहीं है।

केवल 2 वचन देता करता बहुत सक्रिय परियोजना के लिए हालांकि नहीं कर सकता हूँ, ...

+1

उम्मम, यह वास्तव में एक "प्रोजेक्ट" नहीं है जो आपको सिर्फ 'CreateFileW' पर कॉल करने के लिए PInvoke का उपयोग करने और आपके पथ नाम की शुरुआत में' \\? \। 'का उपयोग करने के लिए कह रहा है। –

+0

मैं इसे वापस लेता हूं, मैंने स्रोत को देखा, वह इसमें कुछ काम करता है। मैं "बहुत सक्रिय नहीं" भाग के बारे में चिंतित नहीं होगा।एक बार जब आप अपनी बग से छुटकारा पा लेते हैं, तो आप कुछ सहायक कार्यों के साथ विंडोज एपीआई को लपेट रहे हैं, –

1

Native File System Access

संशोधन 185 के बाद से (19 फ़रवरी वें, 2013), पुस्तकालय Microsoft Public License (MS-PL) द्वारा कवर किया जाता, जैसा कि स्रोत कोड फ़ाइलों के शीर्षकों में निर्दिष्ट है।

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

इस पुस्तकालय में कुछ unit tests है, लेकिन दस्तावेज़ों की कमी है।

+0

करने के लिए और कुछ नहीं है लिंक –

+0

@ थॉमस लेवेस्क्यू: फिक्स्ड, टिप के लिए धन्यवाद! –

+0

मैं इस पुस्तकालय की सिफारिश नहीं कर सकता। मूलभूत कार्यक्षमता, जैसे 'File.Open' काम नहीं करती है (स्ट्रीम के संभाल को संभालती है और' पहुंच '/ 'शेयर' पैरामीटर को अनदेखा करती है) और फ़ाइल गणना चुपचाप त्रुटियों को अनदेखा करती है। – CodesInChaos

2

आप Base Class Libraries Long Path implementation को आजमा सकते हैं। लेकिन ध्यान रखें कि अगर आप डिफ़ॉल्ट .NET I/O विधियों के साथ मिश्रण करना शुरू करते हैं तो सबकुछ काम नहीं करेगा।

+0

यह अनुशंसित समाधान है। +1 पहले बड़े पैमाने पर इस्तेमाल किया है। मुझे मूल रिलीज के समय वहां एक बग याद है, लेकिन यह खुला स्रोत है और मुझे यकीन है कि यह आधिकारिक तौर पर तय होने के बाद से किया गया है। –

+0

+1 ग्रेट! लाइसेंस माइक्रोसॉफ्ट पब्लिक लाइसेंस (एमएस-पीएल) है जो ओपन सोर्स है, भले ही दुर्भाग्य से जीएनयू-जीपीएल के साथ संगत नहीं है: http://www.gnu.org/licenses/license-list.html#ms-pl –

1

आप पथ बंटवारे संबंधित पथ का उपयोग करके के रूप में उपयोग करते हुए इस उत्तर में उल्लिखित की कोशिश कर सकते:

Directory.SetCurrentDirectory() 

PathTooLongException in C# code

+0

दिलचस्प ... शायद एक पुस्तकालय है जो मेरे लिए यह चाल स्वचालित रूप से करता है? –

3

AlphaFS आप बहुत लंबे पथ ("? \ \" शैली का उपयोग का उपयोग करने देता) और System.IO नामस्थान की नकल करता है।

आप शायद इस लाइब्रेरी का उपयोग करने में सक्षम होंगे जैसे कि आप System.IO का उपयोग कर रहे थे। उदाहरण के लिए, AlphaFS.Win32.Filesystem.File.Copy() इसके बजाय System.IO.File.Copy()।

(source)

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

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