Ist ExifLib in einer WPF / XAML-App verwendbar?

Ich möchte Exif-Daten aus JPG-Bildern extrahieren. ExifLib schien eine gute Wahl zu sein, um diesen Job zu vereinfachen, und so habe ich ihn über NuGet installiert.

Ich habe dann versucht, mit dem Beispielcode von @ zu beginneHie (Auskommentieren des MessageBox-Codes für den Moment):

using (ExifReader reader = new ExifReader(@"C:\temp\testImage.jpg"))
{
    // Extract the tag data using the ExifTags enumeration
    DateTime datePictureTaken;
    if (reader.GetTagValue<DateTime>(ExifTags.DateTimeDigitized, out datePictureTaken))
    {
        // Do whatever is required with the extracted information
        //System.Windows.MessageBox.Show(this, string.Format("The picture was taken on {0}",
        //   datePictureTaken), "Image information"); //, MessageBoxButtons.OK);
    }
}

aber eine Fehlermeldung erhalten:

Die beste überladene Methodenübereinstimmung für 'ExifLib.ExifReader.ExifReader (System.IO.Stream)' hat einige ungültige Argumente

un

Argument 1: Konvertierung von 'string' nach 'System.IO.Stream' nicht möglich

both in dieser Zeile:

using (ExifReader reader = new ExifReader(@"C:\temp\testImage.jpg"))

Ist dies behebbar oder kann ExifLib in einer WPF / XAML-App nicht verwendet werden?

Wenn ExifLib @ inich eine praktikable Lösung für eine WPF / XAML-App, welche Alternativen gibt es?

Aktualisieren

Mit diesem Code aus der Antwort von Simon McKenzie:

private void btnLoadNewPhotoset_Click(object sender, RoutedEventArgs e)
{
    using (var store = IsolatedStorageFile.GetUserStoreForApplication())
    using (var stream = store.OpenFile("testImage.jpg", FileMode.Open))
    using (var reader = new ExifReader(stream))
    {
        // ...
    }
}

Ich erhalte immer noch eine Fehlermeldung:

Der Typ- oder Namespace-Name 'IsolatedStorage' ist im Namespace 'System.IO' nicht vorhanden. (Fehlt ein Assemblyverweis?)

Dies ist eine in Visual Studio 2013 erstellte Windows Store-App (C #). Aus den Projekteigenschaften geht hervor, dass sie Windows 8.1 als Ziel hat, und Configuration Manager zeigt configuration == debug, platform = x64 an.

Die angezeigten Referenzen meines Projekts sind:

.NET for Windows Store apps
Bing.Maps.Xaml
ExifLib
Microsoft Visual C++ Runtime Package
Windows 8.1

Was vermisse ich

Update 2:

Wenn ich Assemblies.Framework im Referenz-Manager betrachte, heißt es: "Alle Framework-Assembles sind bereits referenziert ..." Ich gehe davon aus, dass mscorlib.dll eine davon sein soll (sie werden nicht aufgelistet)?

Ich habe meine Festplatte nach "mscorlib.dll" durchsucht und ich habe eine Million davon, alle mit unterschiedlichen Größen und Daten. Welches sollte ich als Referenz hinzufügen? Ich habe alles von einem in C: \ Programme (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5 vom 09.07.2012 mit einer Dateigröße von 2.564.528 bis zu einem in C: \ Programme (x86) ) \ Reference Assemblies \ Microsoft \ Framework.NETCore \ v4.5.1 nach ... Ihren Namen.

Denken "C: \ Programme (x86) \ Referenzassemblies \ Microsoft \ Framework.NETCore \ v4.5.1" schien die beste Wahl zu sein. Ich habe versucht, über die Schaltfläche "Durchsuchen" darauf zu verweisen, aber als ich das tat, wurde ich geschimpft mit:

m Interesse der vollständigen Offenlegung wird im Referenz-Manager für Windows 8.1 die Meldung "Das Windows 8.1-SDK ist bereits referenziert." Angezeig

Für Windows 8.1.Extensions zeigt es mir:

Microsoft Visual C++ 2013 Runtime Package for Windows 12.0 (unchecked)
Microsoft Visual C++ 2013 Runtime Package 11.0 (checked)

Da dies die Ursache für eine der Warnungen zu sein scheint, habe ich ihre Überprüfung rückgängig gemacht (überprüft 2013, deaktiviert die andere).

Ich habe auch überprüft:

Behaviors SDK (XAML) 12.0
SQLite for Windows Runtime 3.8.6 (because I will eventually be using SQLite in this project)

Update 3:

Ich habe gerade folgendes gefunden: "Isolated Storage ist für Windows Store-Apps nicht verfügbar. Verwenden Sie stattdessen die Anwendungsdatenklassen in den Windows.Storage-Namespaces, die in der Windows Runtime-API enthalten sind, um lokale Daten und Dateien zu speichern." Hie.

Update 4:

Ich warte auf Simons Beispiel, aber ich denke, es könnte so etwas sein:

using Windows.Storage;
using ExifLib;
. . .
private async void btnOpenImgFiles_Click(object sender, RoutedEventArgs e)
{
    FileOpenPicker openPicker = new FileOpenPicker();
    openPicker.ViewMode = PickerViewMode.Thumbnail;
    openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
    openPicker.FileTypeFilter.Add(".jpg");
    openPicker.FileTypeFilter.Add(".jpeg");
    openPicker.FileTypeFilter.Add(".png");

    IReadOnlyList<StorageFile> files = await openPicker.PickMultipleFilesAsync();
    for (int i = 0; i < files.Count; i++)
    {
        using (var randomAccessStream = await files[i].OpenAsync(FileAccessMode.Read))
        using (var stream = randomAccessStream.AsStream())
        using (var exfrdr = new ExifReader(stream))
        {
            // ...exfrdr
        }
    }
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage