2012-11-26 11 views
5

Podczas tworzenia laboratorium w oknie 8 app dev. Nie mogłem załadować wszystkich potrzebnych obrazów. Tak więc w przypadku części udziału do pracy z obrazem udostępniania potrzebuję sprawdzić, czy plik obrazu jest dostępny. Projekt jest siatka aplikacji Windows przy użyciu XAML i C# W przeszłości używałemJak sprawdzić, czy plik istnieje w aplikacji WindowsStore

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

Jeśli próbuję to w moim projekcie window8. Klasa File nie została znaleziona.

ja szukać w Internecie, ale nie mógł znaleźć przykład kodu, który checkes się existance w aplikacji Windows Store w C#

Michiel

Odpowiedz

13

trzeba StorageFile nie File

tutaj jest prosty przykład w celu sprawdzenia i pobrać plik

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

można napisać funkcję

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

Wydaje się, że powinno być „[StorageFolder] (http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.storagefolder) "zamiast" LocalStorage "- jest to zmiana w interfejsie API, ponieważ została ona odebrana lub po prostu moja własna nieporozumienie? –

+0

Musi być jakaś zmiana api lub jakieś nieporozumienie z twojej strony, ponieważ powyższy kod zadziałał prawidłowo. – Mayank

+1

@DawsonToth Sądzę, że zmienili api, a teraz zamiast 'LocalStorage' to' LocalFolder' – Mayank

2

Jeżeli znasz ścieżkę lokalnego przechowywania i masz kilka plików, aby sprawdzić, można wykonać następujące czynności ...

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

Oczywiście, 'Windows.ApplicationModel.Package.Current.InstalledLocation' można zastąpić odpowiednim odniesieniem do folderu, który Cię interesuje. – ZombieSheep

Powiązane problemy