2014-05-18 8 views
6

मेरे पास विजुअल स्टूडियो में मेरे प्रोजेक्ट के फ़ोल्डर में एक छवि फ़ाइल है और यह क्रिया "संसाधन" बनाने के लिए सेट है, इसलिए यह मेरी exe फ़ाइल में शामिल है। मैं इस फ़ाइल को xaml में कोई समस्या नहीं जोड़ सकता, उदाहरण के लिए < इमेज स्रोत = "छवियों/myimage.png"> और यह काम करता है।जांच कर रहा है कि संसाधन फ़ाइल मौजूद है

लेकिन अगर मैं फ़ाइल के अस्तित्व को जांचने का प्रयास करता हूं, तो File.exists ("images/myimage.png") के साथ यह हमेशा झूठा होता है। मुझसे यहां क्या गलत हो रहा है?

+2

तुम शायद में देख रहे हैं गलत रास्ता – CodeCaster

+0

आप गलत हैं, आपका यूआरएल "इमेज/myimage.png" किसी संसाधन को इंगित नहीं करता है, यह एक फाइल को इंगित करता है। संसाधन का संदर्भ देने के लिए पैक: // योजना का प्रयोग करें। – torvin

+0

फ़ाइल.इक्सिस्ट ("पैक: //images/myimage.png"); एक त्रुटि फेंकता है: दिए गए पथ का प्रारूप समर्थित नहीं है। – user3595338

उत्तर

6

यदि आप इसे आउटपुट फ़ोल्डर में अतिरिक्त रूप से बंडल नहीं करना चाहते हैं - आपको कुछ भी करने की ज़रूरत नहीं है। यह आपके exe में बनाया गया है, जांच करने की जरूरत नहीं है। हमेशा सच होगा।


ठीक है, मैं समझता हूं क्योंकि आप गतिशील रूप से अपने एम्बेडेड संसाधन का नाम बनाते हैं जिसे आप देखना चाहते हैं।

यहाँ देखें: WPF - check resource exists without structured exception handling

वे मूल रूप से Assembly.GetExecutingAssembly().GetManifestResourceNames()

के खिलाफ जांच आपको लगता है कि उपयोग कर सकते हैं एक प्रारंभिक बिंदु के रूप में। लेकिन ध्यान दें कि संसाधन का नाम छवियों/myimage.png नहीं है, लेकिन आपके नामस्थान से बनाया गया है YourApp.images.myimage.png। आप उस उत्तर से निर्मित संसाधन नाम सरणी की सामग्री को देखना चाहेंगे।

+0

असल में यह मामला नहीं है, मैं फ़ाइल को चर के साथ लिंक करता हूं, इसलिए फ़ाइल पथ इस तरह दिखता है: "छवियां /" + फ़ाइल नाम + ".png", यह अक्सर होता है कि संबंधित फ़ाइल मौजूद नहीं होगी और मुझे चाहिए इसके लिए जांच करने के लिए मैं इसके बजाय "छवियों/default.png" पथ की आपूर्ति कर सकते हैं। – user3595338

+0

ठीक है, मैं समझता हूं और अपडेट करता हूं – ZoolWay

2

क्या आपने "आउटपुट में कॉपी करें" संपत्ति "हमेशा" पर सेट की है? और सुनिश्चित करें कि आप सही पथ का उपयोग करें। निम्नलिखित निष्पादन असेंबली का मार्ग निम्नलिखित कोड का उपयोग करके पता लगाया जा सकता है:

private string GetExecutingAssemblyPath() 
{ 
     string codeBase = Assembly.GetExecutingAssembly().CodeBase; 
     UriBuilder uri = new UriBuilder(codeBase); 
     string path = Uri.UnescapeDataString(uri.Path); 
     return Path.GetDirectoryName(path); 

} 

चीयर्स।

+1

क्या आपने "आउटपुट में कॉपी करें" संपत्ति को "हमेशा" पर सेट किया है? नहीं, मैं निर्देशिका में फ़ाइल को अलग नहीं करना चाहता हूं, मैं इसे सीधे अपने exe फ़ाइल में शामिल करना चाहता हूं और जांचता हूं कि यह वहां मौजूद है या नहीं। – user3595338

0

Xamarin.Forms

एक काम कर कोड से, चेकों स्वत: जनरेट फ़ाइल नाम (के रूप में यहाँ https://developer.xamarin.com/guides/xamarin-forms/user-interface/images/#Embedded_Images वर्णित) साझा परियोजना में एम्बेड किए गए संसाधनों में मौजूद रहने पर

 var assembly = typeof(App).GetTypeInfo().Assembly; 
     var AssemblyName = assembly.GetName().Name; 
     var generatedFilename = AssemblyName+".Images.flags.flag_" + item.CountryCode?.ToLower() + @".png"; 

      bool found = false; 
      foreach (var res in assembly.GetManifestResourceNames()) 
      { 
       if (res == generatedFilename) 
       { 
        found = true; 
        break; 
       } 
      } 

      if (found) UseGeneratedFilename(); 
      else UseSomeOtherPlaceholderImage; 
संबंधित मुद्दे