2014-05-18 37 views
6

Ho un file di immagine nella cartella del mio progetto in Visual Studio ed è impostato per creare un'azione "risorsa" in modo che sia inclusa nel mio file exe. Posso collegarmi a questo file in xaml senza problemi, ad esempio < .Image Source = "images/myimage.png"> e funziona.Verifica se il file di risorse esiste

Ma se provo a verificare l'esistenza del file, con File.exists ("images/myimage.png") restituisce sempre false. Cosa sto facendo di sbagliato qui?

+2

Probabilmente stai cercando di la strada sbagliata. – CodeCaster

+0

Hai sbagliato, il tuo URL "images/myimage.png" non punta a una risorsa, punta a un file. Usa lo schema pack: // per fare riferimento a una risorsa. – torvin

+0

File.Exists ("pacchetto: //images/myimage.png"); Genera un errore: il formato del percorso specificato non è supportato. – user3595338

risposta

6

Se non si desidera aggiungerlo alla cartella di output in aggiunta, non è necessario fare nulla. È costruito nel tuo exe, non è necessario controllare. Sarebbe sempre vero


Ok, ho capito perché si crea dinamicamente il nome della risorsa incorporata che si desidera controllare.

vedere qui: WPF - check resource exists without structured exception handling

Si tratta fondamentalmente di controllo contro Assembly.GetExecutingAssembly().GetManifestResourceNames()

È possibile utilizzare che come punto di partenza. Nota che il nome della risorsa non è images/myimage.png ma costruito dal tuo spazio dei nomi come YourApp.images.myimage.png. Potrebbe essere utile dare un'occhiata al contenuto della matrice resourceNames creata da quella risposta.

+0

In realtà non è questo il caso, collego il file a una variabile in modo che il percorso del file assomigli a questo: "images /" + filename + ".png", capita spesso che il file corrispondente non esista e io abbia bisogno per controllare questo, quindi posso fornire il percorso "images/default.png". – user3595338

+0

Ok, ho capito e aggiornato – ZoolWay

2

Hai impostato la proprietà "Copia in uscita" su "Sempre"? e assicurarsi di utilizzare il percorso corretto. Il percorso dell'assembly in esecuzione può essere rilevato utilizzando il seguente codice:

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

} 

Cheers.

+1

Hai impostato la proprietà "Copia in uscita" su "Sempre"? No, non voglio che il file sia separato nella directory, voglio averlo incluso direttamente nel mio file exe e controllare se esiste lì. – user3595338

0

Xamarin.Forms

Da un codice di lavoro, controlla se il nome del file generato automaticamente esiste in risorse incorporate nel progetto condiviso (come descritto qui 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;