У меня есть два файла с таким же именем в KnownFolders.VideosLibrary, в этом случае я не могу получить доступ к файлу по его имени, поэтому он вернет только первый. Поэтому есть ли другой способ получить файл другой, который разбирает все файлы в папке?
// this return two files
var files = (await KnownFolders.VideosLibrary.GetFilesAsync()).Where(x => x.Name == "test.txt").ToArray();
// with this I can get only one file
StorageFile file = await KnownFolders.VideosLibrary.GetFileAsync("test.txt");
// of course I can parse it with query, but I would like to avoid it
// StorageFile myFile = (await KnownFolders.VideosLibrary.GetFilesAsync()).FirstOrDefault(x => x.FolderRelativeId == "something");
Я знаю FutureAccessList, но он может содержать только до 1000 файлов, чего мне недостаточно.
Некоторые пояснения после запроса:
Например, рассмотрим, что приложение работает на телефоне с SD-картой. У меня есть один файл в видео в памяти телефона с именем test.txt
, файл с тем же именем существует и на SD-карте в папке "Видео".
В этой ситуации, когда вы вызываете первую строку в коде выше, вы получите два файла, чтобы их дифференцировать, система предоставляет FolderRelativeId, поэтому файлы с тем же именем могут существовать в одном "местоположении". Если вы посмотрите полный путь к каждой папке, у вас, вероятно, будет C:\Viedos\test.txt
и второй D:\Videos\test.txt
.
Теперь пользователь в первом запуске взял файл с FilePicker, и я вспомнил его путь, например D:\Videos\test.txt
. Во втором запуске приложения я хотел бы иметь доступ к этому файлу, используя его путь (или другой метод, кроме ограниченного FutureAccessList). Раньше я делал это с помощью StorageFile.GetFileFromPathAsync(path);
- кажется, что он начинает бросать UnauthorizedAccessException в W10.