Überprüfen, ob eine Datei im Projekt vorhanden sind, in WinRT
Habe ich ein WinRT-Metro-Projekt, das zeigt Bilder, die basierend auf einem ausgewählten Element. Jedoch einige der Bilder ausgewählt wird, existiert nicht. Was möchte ich in der Lage sein zu tun ist, Falle Falle, wo Sie nicht vorhanden sind und zeigt eine alternative.
Hier ist mein code bisher:
internal string GetMyImage(string imageDescription)
{
string myImage = string.Format("Assets/MyImages/{0}.jpg", imageDescription.Replace(" ", ""));
//Need to check here if the above asset actually exists
return myImage;
}
Beispiel-Aufrufe:
GetMyImage("First Picture");
GetMyImage("Second Picture");
So Assets/MyImages/SecondPicture.jpg
vorhanden ist, aber Assets/MyImages/FirstPicture.jpg
nicht.
Zuerst habe ich gedacht, der mit den WinRT-äquivalent File.Exists()
, aber es scheint nicht zu sein. Ohne zu gehen, um den Umfang versuchen, die Datei zu öffnen und fangen einen Fehler, kann ich einfach prüfen, ob entweder die Datei existiert, oder die Datei im Projekt vorhanden sind?
Ich würde behaupten, dass er nicht davon ausgehen, dass Sie existieren. Er weiß, vor der Zeit, dass es eine Möglichkeit gibt Sie nicht existieren.
Sehr einverstanden mit @mydogisbox. ExistsAsyns() wurde diskutiert, da dev preview aber noch nicht gemacht. Ich würde noch gerne hören, die argumentation hinter...
Ich war gerade auf der Suche an einem ähnlichen problem in meinem toolkit und dachte, es war ein echter Mist, dass Sie die Exists-Methode nicht... vorhanden. Alles, was über race conditions und die Methode als eine schlechte Praxis - was über die Vermögenswerte Anwendung, die sollten sich nicht ändern und wird praktisch nie gewechselt werden? Ich wollte überprüfen, für die Dateien in meinem appx, aber ich konnte nicht finden eine andere Möglichkeit, als zu versuchen, diese zu öffnen und abfangen von Ausnahmen, die, wenn Sie fehlen, das ist wirklich hässlich. Vielleicht ResourceManager konnte helfen, Sie finden?
Fand einige Dinge über den ResourceManager. Sie können prüfen, ob Dateien in das app-Paket so: ResourceManager.Aktuelle.MainResourceMap.ContainsKey("Files/Assets/Logo.png") oder Ressourcen-Manager.Aktuelle.MainResourceMap.ContainsKey("Dateien/WinRTXamlToolkit/Themes/Generic.xaml") - für Dateien von referenzierten Bibliotheken. Dies hat den zusätzlichen Vorteil der Umgang mit geeigneten Ressourcen - wie Bilder, die möglicherweise Hinzugefügt wurden, mit Skala-IDS in Namen, aber nicht an der Basis unvollständiger Namen - z.B. Logo.png vs-Logo.scale-100.png, Logo.scale-140.png, Logo.scale-180.png etc.
InformationsquelleAutor pm_2 | 2012-08-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie
GetFilesAsync
aus hier zum auflisten der vorhandenen Dateien. Dies scheint Sinn zu machen, da du mehrere Dateien haben, die möglicherweise nicht existieren.Edit:
Als @Filip Skakun darauf hingewiesen, dass der Ressourcen-manager hat eine Ressource-Zuordnung auf, die Sie aufrufen können
ContainsKey
die den nutzen der Prüfung für qualifizierte Ressourcen (d.h. lokalisiert, skaliert usw).Edit 2:
Windows 8.1 vorgestellt, eine neue Methode, um Dateien und Ordner:
Auf welcher Zeile bekommst du den Fehler?
GetFolderFromPathAsync
Brauchte nur die installedLocation von @Dave Bost Antwort
Ah, ja. Sie wahrscheinlich erforderlich, um die entsprechenden URI-Schema wie hier: stackoverflow.com/a/12020163/901059 Und seinen Weg, den Weg auto-stellt.
InformationsquelleAutor mydogisbox
Gibt es zwei Möglichkeiten, wie Sie damit umgehen können.
1) Fangen die FileNotFoundException beim Versuch, die Datei:
2) als mydogisbox empfiehlt, die Verwendung von LINQ. Obwohl die Methode, die ich getestet habe ist ein wenig anders:
Nur im Fall, jemand stolpert über das für das schreiben von WinRT-apps für Windows Phone 8.1, CommonFileQuery wird derzeit nicht unterstützt.
InformationsquelleAutor Dave Bost - MSFT
BitmapImage
hat eineImageFailed
Ereignis, das ausgelöst wird, wenn das Bild nicht geladen werden kann. Damit würden Sie versuchen, laden Sie das original-Bild, und dann reagieren, wenn es nicht da ist.Natürlich, dies erfordert, dass Sie instanziieren die
BitmapImage
selbst, anstatt nur auf dieUri
.InformationsquelleAutor Joe White
Stichprobenkontrollen für die Verfügbarkeit von Ressourcen für c++ /cx (getestet mit Windows Phone 8.1):
InformationsquelleAutor marcinj