2010-04-02 8 views
6

की बाइनरी सामग्री पढ़ें मैं एक .lnk फ़ाइल की बाइनरी सामग्री को पढ़ना चाहता हूं। जब तक शॉर्टकट (lnk फ़ाइल) का लक्ष्य मौजूद है, यह IO.File.ReadAllBytes (स्ट्रिंग फ़ाइल) के साथ ठीक काम करता है।.NET .lnk फ़ाइल

लेकिन

तो शॉर्टकट का लक्ष्य मौजूद नहीं है (मुझे विश्वास है कि मैं यह चाहता हूँ) विधि केवल रिटर्न शून्य के। मुझे लगता है कि ऐसा इसलिए है क्योंकि ओएस लिंक का पालन करता है और यदि यह अस्तित्व में नहीं है तो यह शून्य का

क्या इस तथ्य को बाईपास करने का कोई तरीका है कि ढांचा .lnk फ़ाइल की सामग्री प्रदर्शित करने से पहले .lnk के लक्ष्य का पालन करता है। ?

उत्तर

0

बाहर कर देता है, क्योंकि यह किसी अन्य मशीन से कॉपी किया गया था फ़ाइल ताला लगा हुआ था (मैं सर्वर 2008 R2 उपयोग कर रहा हूँ) को अनलॉक यह behavoir लौटे उम्मीद है।

बेवकूफ मुझे।

0

मुझे विश्वास नहीं है कि ReadAllBytes ओएस को अपने लक्ष्य में एलएनके का पालन करने के लिए प्रेरित करता है। मुझे संदेह है कि ओएस ने पहले से ही lnk फ़ाइल को हल कर लिया है (शायद जब आप विंडोज एक्सप्लोरर में फ़ाइल में ब्राउज़ करते हैं)।

+0

यह किसी अन्य कंप्यूटर से विज्ञापित शॉर्टकट है, इसलिए लिंक को कभी भी हल नहीं किया जा सकता – Flores

18

यह बहुत समझ में नहीं आता है, इसे जांचने का कोई आसान तरीका नहीं है। मुझे लगता है कि .lnk फ़ाइल को पढ़ने के तरीके को पढ़ने के लिए सबसे अच्छा तरीका है। आप ऐसा करने के लिए COM का उपयोग कर सकते हैं, ShellLinkObject class IShellLink इंटरफ़ेस लागू करता है। प्रोजेक्ट + संदर्भ जोड़ें, टैब ब्राउज़ करें और c: \ windows \ system32 \ shell32.dll पर नेविगेट करें। यह एक इंटरऑप पुस्तकालय उत्पन्न करता है। इस तरह कोड लिखें:

public static string GetLnkTarget(string lnkPath) { 
    var shl = new Shell32.Shell();   // Move this to class scope 
    lnkPath = System.IO.Path.GetFullPath(lnkPath); 
    var dir = shl.NameSpace(System.IO.Path.GetDirectoryName(lnkPath)); 
    var itm = dir.Items().Item(System.IO.Path.GetFileName(lnkPath)); 
    var lnk = (Shell32.ShellLinkObject)itm.GetLink; 
    return lnk.Target.Path; 
} 
+0

अच्छा स्निपेट। बीटीडब्ल्यू, जब मैंने इसका इस्तेमाल किया तो मुझे lnk.Target.Path को वापस करने के लिए अंतिम पंक्ति को बदलना पड़ा। –

+0

दरअसल, आखिरी पंक्ति वापसी होनी चाहिए lnk.Path –

+0

यह उच्चारविज्ञान के साथ भी काम करता है! – qub1n

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