मैं एक आउट-ऑफ़-ब्राउज़र सिल्वरलाइट प्रोग्राम पर काम कर रहा हूं, और मैंने इसे OpenFileDialog के माध्यम से स्थानीय फ़ाइलों को खोलने के लिए सफलतापूर्वक प्राप्त कर लिया है। हालांकि, अब मुझे इसे अपने स्वयं के एक्सएपी के भीतर से एक फ़ाइल खोलने की आवश्यकता है (कोई ब्राउज़िंग आवश्यक नहीं है, खोलने के लिए फ़ाइल हार्ड-कोडेड है)। मैं इस कोड का उपयोग करने की कोशिश कर रहा हूं, लेकिन यह काम नहीं कर रहा है:

using (StreamReader reader = new StreamReader("Default.txt"))
{
   TextBox1.Text = reader.ReadToEnd();
}

यह कोड एक SecurityException फेंकता है जो कहता है कि "फ़ाइल संचालन की अनुमति नहीं है। पथ 'Default.txt' तक पहुंच अस्वीकार कर दी गई है।" मैं क्या गलत कर रहा हूं?

4
BCXtreme 18 फरवरी 2011, 22:04

1 उत्तर

सबसे बढ़िया उत्तर

आपका कोड "Default.txt" नामक फ़ाइल को खोलने का प्रयास कर रहा है जो उपयोगकर्ता के फ़ाइल सिस्टम में कहीं बाहर है। जहां वास्तव में मुझे नहीं पता, क्योंकि यह इस बात पर निर्भर करता है कि सिल्वरलाइट ऐप कहां से निष्पादित हो रहा है। तो हाँ, सामान्य तौर पर आपको वहाँ जाने की अनुमति नहीं है।

अपने एक्सएपी से कुछ खींचने के लिए, आपको अलग-अलग स्ट्रीम बनाने की जरूरत है। यह इन पंक्तियों के साथ होगा:

Stream s = Application.GetResourceStream(
    new Uri("/MyXap;component/Path/To/Default.txt", UriKind.Relative)).Stream;
StreamReader reader = new StreamReader(s);

ध्यान दें, इसका मतलब है कि आपका Default.txt 'संसाधन' पर सेट होना चाहिए, न कि 'एम्बेडेड संसाधन' पर। एक 'संसाधन' होने से यह XAP में जुड़ जाएगा। एंबेडेड रिसोर्स इसे असेंबली में जोड़ देगा।

अधिक जानकारी: http://nerddawg.blogspot.com/2008/ 03/silverlight-2-demystifying-uri.html

नोट: ऐसे मामलों में जहां आपके सिल्वरलाइट प्रोग्राम में एकाधिक असेंबली हैं, जांच लें कि उरी स्ट्रिंग का "/ MyXap" भाग संसाधन वाले असेंबली के नाम का संदर्भ देता है। उदाहरण के लिए यदि आपके पास दो असेंबली "ProjectName" और "ProjectName.Screens" हैं, जहां "ProjectName.Screens" में आपका संसाधन है, तो निम्न का उपयोग करें:

new Uri("ProjectName.Screens;component/Path/To/Default.txt", UriKind.Relative))
9
Spontifixus 19 जुलाई 2013, 13:15
इसे "संसाधन" पर सेट करना समर्थित नहीं है, "सामग्री पर सेट होने पर इसे xap में जोड़ा जाता है। यूरी तब "/Path/To/Default.txt" होता है। प्रदान किया गया लिंक इसे सही ढंग से कहता है।
 – 
John
15 नवम्बर 2013, 18:07
मैं पहले स्लैश को हटाकर इसे काम करने में कामयाब रहा। तो मेरा पथ "पथ/टू/Default.txt" जैसा दिखता है
 – 
Pashec
8 अगस्त 2014, 00:44