.net

2008-11-03 5 views
5

में छोटे पथ में कनवर्ट करने के लिए मानक तरीका "लंबे नाम" जैसे "लंबे नाम" जैसे "सी: \ दस्तावेज़ और सेटिंग्स" को उनके समकक्ष "लघु नाम" में परिवर्तित करने के लिए मानक बग-प्रूफ किए गए तरीके की तलाश करना "सी: \ DOCUME ~ 1 ".net

मुझे अपने सी # ऐप से बाहरी प्रक्रिया चलाने के लिए इसकी आवश्यकता है। यह विफल रहता है अगर मैं इसे "लंबे नाम" में पथ के साथ खिलाता हूं।

+0

FYI करें मेरा मानना ​​है कि "लघु पथ" "8.3 नाम" कहा जाता है – user17753

उत्तर

4

बाहरी प्रक्रिया विफल होता है, भले ही आप उद्धरण में लंबे फ़ाइल पथ लगा? बाहरी ऐप इसका समर्थन करता है, तो यह एक आसान तरीका हो सकता है।

उदा।

myExternalApp "C:\Documents And Settings\myUser\SomeData.file" 
+0

यह काम करता है। क्या आपके पास कोई स्पष्टीकरण या दस्तावेज़ीकरण है जो बताता है कि क्या होता है? – Hanan

+0

वास्तव में नहीं। यदि स्ट्रिंग को उद्धरण के साथ सीमित किया गया है तो यह आधुनिक ऐप्स के लिए तर्कों के साथ तर्क स्वीकार करने के लिए केवल (उचित रूप से) मानक व्यवहार है ... – ZombieSheep

+2

आपको उद्धरणों की आवश्यकता है क्योंकि पथ मूल रूप से एक कमांड लाइन विकल्प है, और स्पेस कमांड लाइन विकल्पों के लिए डिलीमीटर है। यदि आप इसमें रिक्त स्थान वाले पथ का उपयोग करते हैं, तो कमांड लाइन को एकाधिक विकल्पों में पार्स किया जाएगा। परिभाषा: "अंतरिक्ष" - एएससीआईआई चरित्र अक्सर चरित्र की अनुपस्थिति के लिए गलत होता है –

19

यदि आप Windows API फ़ंक्शंस में कॉल करना प्रारंभ करने के लिए तैयार हैं, तो GetShortPathName() और GetLongPathName() इस कार्यक्षमता प्रदान करते हैं।

देखें http://csharparticles.blogspot.com/2005/07/long-and-short-file-name-conversion-in.html

const int MAX_PATH = 255; 

    [DllImport("kernel32.dll", CharSet = CharSet.Auto)] 
    public static extern int GetShortPathName(
     [MarshalAs(UnmanagedType.LPTStr)] 
     string path, 
     [MarshalAs(UnmanagedType.LPTStr)] 
     StringBuilder shortPath, 
     int shortPathLength 
     ); 

    private static string GetShortPath(string path) { 
     var shortPath = new StringBuilder(MAX_PATH); 
     GetShortPathName(path, shortPath, MAX_PATH); 
     return shortPath.ToString(); 
    } 
+1

+1 im सिर्फ एक exe है कि केवल (एक आंतरिक बग के कारण) shortpaths के साथ काम करता –

+1

MAX_PATH एकीकृत = 260 windows.h – Constantin

+0

में यह लगता है असफल (कुछ भी नहीं लौटाता है) यदि आप इसे एक पथ पास करते हैं जो 'MAX_PATH' से छोटा है तो छोटा होना चाहिए। – user17753

3

WinAPI से GetShortPathName के साथ चाल ठीक काम करती है, लेकिन बहुत लंबे पथों का उपयोग करते समय सावधान रहें।

MAXzATH से अधिक पथों के साथ 7zip को कॉल करते समय हमें केवल एक समस्या थी। अगर पथ बहुत लंबा था तो GetShortPathName काम नहीं कर रहा था। बस इसे "\? \" से उपसर्ग करें और फिर यह काम करेगा और सही ढंग से छोटा रास्ता लौटाएगा।

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