2011-04-18 16 views
6

मैं फ़ाइल सिस्टम पर रखी गई फ़ाइलों से कुछ बिटमैप छवियों को लोड करने की कोशिश कर रहा हूं। मेरे पास चाबियों और रिश्तेदार फाइलपैथ का शब्दकोश है। दुर्भाग्यवश उरी कन्स्ट्रक्टर इस तरह से निर्धारित नहीं करता है कि यह छवियों को लोड करेगा।सी # उरी लोडिंग गैर निर्धारक?

foreach(KeyValuePair<string, string> imageLocation in _imageLocations) 
{ 
    try 
    { 
     BitmapImage img = new BitmapImage(); 
     img.BeginInit(); 
     img.UriSource = new Uri(@imageLocation.Value, UriKind.Relative); 

     img.EndInit(); 
     _images.Add(imageLocation.Key, img); 
    } 
    catch (Exception ex) 
    { 
     logger.Error("Error attempting to load image", ex); 

    } 
} 

दुर्भाग्य से कभी कभी Uris के रूप में रिश्तेदार फ़ाइल Uris लोड हो और कभी कभी वे के रूप में रिश्तेदार पैक Uris लोड हो:

यहाँ मेरी कोड है। ऐसा कोई कविता या कारण प्रतीत नहीं होता है जिसके लिए किस तरह से लोड किया जाएगा। कभी-कभी मुझे सभी यूरी लोडिंग एक तरफ मिलती है, या सिर्फ एक जोड़े, या उनमें से अधिकतर, और जब भी मैं कोड चलाता हूं तो यह बदल जाएगा।

कोई विचार क्या हो रहा है?

निरपेक्ष यूआरआई संसाधन (उदाहरण: http://www.contoso.com/index.html) करने के लिए एक पूर्ण संदर्भ की विशेषता है:

+1

क्या आप इस व्यवहार को स्वच्छ परीक्षण परियोजना में पुन: उत्पन्न कर सकते हैं? –

उत्तर

3

ठीक है, एक तरह से ... MSDN इस UriKind के बारे में क्या कहना है, एक रिश्तेदार उरी एक पहले से पर निर्भर करता है, जबकि परिभाषित आधार यूआरआई (उदाहरण: /index.html)

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

दूसरी तरफ, यदि आप जानते हैं कि आपके संसाधन कहां संग्रहीत किए जा रहे हैं (और आपको चाहिए) तो मैं सुझाव दूंगा कि आप केवल सिरदर्द छोड़ दें और अपने संसाधनों को हल करने के लिए एक पूर्ण यूआरआई का उपयोग करें। हर बार काम करता है, और जब आप कम से कम उम्मीद करते हैं तो आपको यात्रा करने के लिए दृश्यों के पीछे कोई मूर्खतापूर्ण कोड नहीं होता है।

+0

मेरे संसाधनों के पथ पूर्ण होने के बजाय सापेक्ष थे। मैंने उस विशिष्ट समस्या को हल किया जो मैं कर रहा था, लेकिन समाधान बहुत क्रोधित लगता है। –

+0

हाँ, सलाह लेने और खुद को जवाब देने के लिए धन्यवाद। बहुत ही शांत। –

+0

यदि यह आपको नाखुश बनाता है तो आपको हरा टिक हो सकता है :-p –

1

अंत में मैंने अपने ऐप की आधार निर्देशिका प्राप्त करके और इसके सापेक्ष पथ को जोड़कर और एक रिश्तेदार के बजाय एक पूर्ण यूआरआई का उपयोग करके समस्या हल की।

string baseDir = AppDomain.CurrentDomain.BaseDirectory; 

foreach(KeyValuePair<string, string> imageLocation in _imageLocations) 
{ 
    try 
    { 
     BitmapImage img = new BitmapImage(); 
     img.BeginInit(); 
     img.UriSource = new Uri("file:///" + baseDir + @imageLocation.Value, UriKind.Absolute); 

     img.EndInit(); 
     _images.Add(imageLocation.Key, img); 
    } 
    catch (Exception ex) 
    { 
     logger.Error("Error attempting to load image", ex); 

    } 
} 
+0

आपको पथ.कॉम्बिन (स्ट्रिंग, स्ट्रिंग) का प्रयास करना चाहिए। http://msdn.microsoft.com/en-us/library/system.io.path.combine.aspx – Francisco

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