2012-11-26 13 views
5

Während ein Labor auf Fenster 8 app dev. Ich konnte nicht alle benötigten Bilder laden. Damit der Share-Teil mit einem Sharing-Imag arbeiten kann, muss ich prüfen, ob die Image-Datei verfügbar ist. Das Projekt ist ein Windows-Raster App XAML und C# In der Vergangenheit habe ichWie überprüft man, ob eine Datei in der Windowsstore-App existiert

verwendet
Using System.IO 
... lost of code 
privat void share() 
.... 
    if (File.exist(filename) 
    { 
     add file to share 
    } 

Wenn ich versuchen, diese in meinem window8 Projekt. Die Dateiklasse wurde nicht gefunden.

ich das Internet durchsucht, konnte aber nicht ein Codebeispiel finden, die die Existenz in einer Windows Store App in C#

Michiel

Antwort

13

Sie StorageFile checkes brauchen nicht File

hier einfaches Beispiel ist zu überprüfen und holen Sie sich die Datei

StorageFile file; 
try { 
    file = await ApplicationData.Current.LocalFolder.GetFileAsync("foo.txt"); 
} 
catch (FileNotFoundException) { 
    file = null; 
} 

Sie eine Funktion schreiben können

public static async Task<bool> FileExistsAsync(this StorageFolder folder, string fileName) 
{ 
    try 
    { 
     await folder.GetFileAsync(fileName); 
     return true; 
    } 
    catch (FileNotFoundException) 
    { 
     return false; 
    } 
} 
+0

Es scheint, dass es „[StorageFolder] sein sollte (http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.storagefolder) "anstelle von" LocalStorage "- ist das eine Änderung in der API, seit diese beantwortet wurde, oder einfach meine eigene Missverständnis? –

+0

Müssen einige api Änderung oder einige Missverständnisse auf Ihrer Seite sein, wie Code oben gut funktioniert. – Mayank

+1

@DawsonToth Ich denke, sie haben die API geändert und jetzt anstelle von 'LocalStorage' ist es' LocalFolder' – Mayank

2

Wenn Sie den Pfad in Ihrem lokalen Speicher wissen, und Sie haben eine Reihe von Dateien zu überprüfen, können Sie Folgendes tun ...

var sourceFolder = Windows.ApplicationModel.Package.Current.InstalledLocation; 
sourceFolder = await sourceFolder.GetFolderAsync("Assets"); 
var files = await sourceFolder.GetFilesAsync(); 
var requiredFiles = new List<String> { "ThisWorks.png", "NotHere.png" }; 
foreach(var filename in requiredFiles) 
{ 
    // your example logic here... 
    Debug.WriteLine(filename + " " + (files.Any(f => f.Name == filename) ? "Exists" : "Doesn't exist")); 
} 
+0

Natürlich kann 'Windows.ApplicationModel.Package.Current.InstalledLocation' durch den entsprechenden Verweis auf den Ordner ersetzt werden, der Ihnen wichtig ist. – ZombieSheep

Verwandte Themen