0

我打算跟踪 FileSystem 视频文件KnownFolders.VideosLibrary以及FutureAccessList(这可以让我访问视频库之外的项目)。

我想保存一些数据以引用StorageFile我的应用程序中使用的每个对象。因此,首先我想到了使用SavePropertiesAsync方法将元数据保存在存储文件的属性上,这样即使文件移动到系统中的其他位置,或者如果它被删除,futureaccesslist 也会自动将其从自身中删除。但我在SavePropertiesAsync()方法上遇到了 ACCESS DENIED 异常。是的,我正在我的应用程序中使用VideoLibrary功能,并且我正在尝试在KnownFolder.VideoLibrary.

现在 saveProperties 不起作用,我正在考虑在我的应用程序中创建一个数据库并通过使用和跟踪该属性的数据来​​跟踪数据,因为它对于每个文件都是唯一的,即使名称相同FolderRelativeIdStorageFile在这种情况下,唯一的限制是,当文件在文件系统中移动时,与文件夹相关的 id 会发生变化,这无法通知给我的应用程序(除非它正在运行,所以我可以使用StorageLibraryTrackerapi)。此外,如果文件被删除,我也不知道。

因此,总结一下什么是StorageFile对象上的属性,我可以使用它在我的文件和该特定视频文件之间同步任何自定义元数据,显然该属性对于该文件应该保持不变,而不管它在文件系统中移动的位置。

4

1 回答 1

1

但我在 savepropertiesasync() 方法上收到 ACCESS DENIED 异常。

如果您启用了功能,则此方法不应引发此异常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.

除非它正在运行,否则我可以使用 StorageLibraryTracker api

如您所知,您可以使用StorageLibraryChange相关 API 来跟踪文件更改。跟踪运行中的应用程序应满足您的要求时的更改。但您甚至可以知道应用程序未通过后台任务运行时的更改。您可以注册一个StorageLibraryChangeTrackerTrigger,当发生更改时,它将触发后台任务。

于 2018-04-17T06:16:24.507 回答