UWP уникальный идентификатор для StorageFile в FileSystem

Я намерен отслеживать видеофайлы FileSystem с помощью KnownFolders.VideosLibrary, а также FutureAccessList (который может дать мне доступ к элементам за пределами видео библиотеки.

Я хочу сохранить некоторые данные в отношении каждого объекта StorageFile, используемого в моем приложении. поэтому сначала я подумал об использовании метода SavePropertiesAsync для сохранения метаданных в свойствах файлов хранилища, чтобы я мог получить к ним доступ, даже если файл перемещается в другое место в системе или если он будет удален, futureaccesslist автоматически удалит его из себя. но я получаю исключение ACCESS DENIED для метода savepropertiesasync(). и да, я использую возможности VideoLibrary в своем приложении, и я пытаюсь этот метод для файла, который находится в пределах KnownFolder.VideoLibrary.

Теперь, когда saveProperties не работает, я думаю о создании базы данных в моем приложении и отслеживании данных с помощью FolderRelativeId из StorageFile и отслеживании данных по этому свойству, поскольку оно уникально для каждого файла даже с одинаковыми именами. единственное ограничение в этом сценарии заключается в том, что связанный с папкой идентификатор изменяется, когда файлы перемещаются в файловой системе, что не может быть сообщено моему приложению (если оно не запущено, поэтому я могу использовать API- интерфейс StorageLibraryTracker). Кроме того, если файл будет удален, я не буду знать, что либо.

Итак, чтобы подвести итог тому, что является свойством объекта StorageFile, который я могу использовать для синхронизации любых пользовательских метаданных между моим файлом и этим конкретным видеофайлом, очевидно, что это свойство должно оставаться одинаковым для этого файла, независимо от того, где оно перемещается в файловой системе.

1 ответ

но я получаю исключение ACCESS DENIED для метода savepropertiesasync().

Этот метод не должен выдавать это исключение, если вы включили VideoLibrary возможность. Проверьте, верен ли ваш фрагмент кода, например:

StorageFolder videofolder = KnownFolders.VideosLibrary;
StorageFile onefile = await videofolder.GetFileAsync("xxx.mp3"); 
VideoProperties properties = await onefile.Properties.GetVideoPropertiesAsync();
properties.Subtitle = "track01";
await properties.SavePropertiesAsync();

Если с правильным фрагментом кода и включенными возможностями вы все равно получите Access Denied исключение, причина должна заключаться в том, что специальный файл настраивается со свойством только для чтения. Пожалуйста, проверьте это, щелкнув правой кнопкой мыши файл и выберите Properties, увидеть Attributes,

если он не запущен, поэтому я могу использовать API StorageLibraryTracker

Как вы знаете, вы можете использовать StorageLibraryChange относительные API для отслеживания изменений файла. Отслеживайте изменения, когда работающее приложение должно соответствовать вашим требованиям. Но вы даже можете знать об изменениях, когда приложение не запускается фоновыми задачами. Вы можете зарегистрировать StorageLibraryChangeTrackerTrigger, когда изменения произошли, это вызовет фоновую задачу.

Другие вопросы по тегам