2015-10-12 9 views
15

Zajmuję się tworzeniem aplikacji, która czyta pliki jpeg i pdf z konfigurowalnej lokalizacji w systemie plików. Obecnie w WPF jest uruchomiona wersja, a teraz próbuję przenieść się do nowych aplikacji Windows Universal.Windows 10 Uniwersalny dostęp do pliku/katalogu

następujący kod działa poprawnie z WPF:

public IList<string> GetFilesByNumber(string path, string number) 
    { 
     if (string.IsNullOrWhiteSpace(path)) 
      throw new ArgumentNullException(nameof(path)); 

     if (string.IsNullOrWhiteSpace(number)) 
      throw new ArgumentNullException(nameof(number)); 

     if (!Directory.Exists(path)) 
      throw new DirectoryNotFoundException(path); 

     var files = Directory.GetFiles(path, "*" + number + "*", 
      SearchOption.AllDirectories); 

     if (files == null || files.Length == 0) 
      return null; 
     return files; 
    } 

Przy użyciu uniwersalnego Apps wpadłem na pewne problemy:

  • Directory.Exists nie jest dostępny
  • Jak można odczytać z katalogów poza moje miejsce do przechowywania aplikacji?

Aby odczytać z innego katalogu poza przechowywania app Próbowałem następujące:

StorageFolder folder = StorageFolder.GetFolderFromPathAsync("D:\\texts\\"); 
var fileTypeFilter = new string[] { ".pdf", ".jpg" }; 
QueryOptions queryOptions = new QueryOptions(CommonFileQuery.OrderBySearchRank, fileTypeFilter); 
queryOptions.UserSearchFilter = "142"; 
StorageFileQueryResult queryResult = folder.CreateFileQueryWithOptions(queryOptions); 
IReadOnlyList<StorageFile> files = queryResult.GetFilesAsync().GetResults(); 

Chodzi o to: To isnt działa, ale pojawia się wyjątek:

Wyjątek typu "System.UnauthorizedAccessException" wystąpił w TextManager.Universal.DataAccess.dll, ale nie był obsługiwany w kodzie użytkownika Dodatkowe informacje: Odmowa dostępu. (Wyjątek od HRESULT: 0x80070005 (E_ACCESSDENIED))

wiem, że trzeba skonfigurować niektóre uprawnienia w manifeście, ale nie mogę znaleźć jeden odpowiednie dla systemu plików operacji IO ...

Czy ktoś również mają takie problemy/możliwe rozwiązanie?

Rozwiązanie: Z rozwiązań @Rico Suter dał mi, chosed się FutureAccessList w połączeniu z FolderPicker. Dostęp do wpisu z tokenem jest również możliwy po ponownym uruchomieniu programu.

Mogę również polecić Ci UX Guidlines i ten Github sample.

Dziękuję bardzo!

+0

Dlaczego chcesz czytać z katalogów spoza magazynu aplikacji? Piaskownica istnieje z jakiegoś powodu. –

+0

Ponieważ chcę łatwy sposób na zmianę plików. Oznacza to, że nie ma możliwości z powodu piaskownicy? – WhiteIntel

Odpowiedz

36

W UWP aplikacji, można uzyskać dostęp tylko następujące pliki i foldery:

Jeśli potrzebujesz dostępu do wszystkich plików w D:\, użytkownik musi ręcznie wybrać dysk D:\ za pomocą narzędzia FolderPicker, a następnie masz dostęp do wszystkiego na tym dysku ...

+0

Zamierzasz opublikować prawie dokładnie tę samą odpowiedź. Dodam również, że powinieneś zadeklarować w swoim manifeście, że chcesz mieć dostęp do Biblioteki obrazów i Magazynu wymiennego. W ten sposób masz dostęp do większości zdjęć ... – Barptad

+0

Czy byłoby możliwe wybranie folderu za jednym razem i zapisanie zwróconej wartości w pliku konfiguracyjnym, aby ponownie użyć ścieżki? – WhiteIntel

+2

Myślę, że możesz pozwolić użytkownikowi wybrać folder jeden raz i umieścić go w FutureAccessList, aby zawsze mieć do niego dostęp później ... –

0

nie jest to prawdą: pliki, które są otwarte w związku rozszerzenia pliku lub poprzez dzielenie spróbować, otwierając pliki z poczty elektronicznej (Outlook) lub z pulpitu ... to po prostu robi nie działa musisz najpierw nadać uprawnienia przez selektor plików. , więc to jest ...