uwp 文件系统上 StorageFile 的唯一标识符
Posted
技术标签:
【中文标题】uwp 文件系统上 StorageFile 的唯一标识符【英文标题】:uwp unique identifier for a StorageFile on FileSystem 【发布时间】:2018-09-26 07:16:25 【问题描述】:我打算使用 KnownFolders.VideosLibrary
和 FutureAccessList
跟踪 FileSystem 视频文件(这可以让我访问视频库之外的项目)。
我想保存一些关于我的应用程序中使用的每个 StorageFile
对象的数据。因此,首先我想到使用SavePropertiesAsync
方法将元数据保存在存储文件的属性上,这样即使文件移动到系统中的其他位置,或者如果它被删除,futureaccesslist 也会自动将其删除本身。但我在SavePropertiesAsync()
方法上遇到了 ACCESS DENIED 异常。是的,我在我的应用程序中使用了VideoLibrary
功能,我正在尝试在KnownFolder.VideoLibrary
中的文件上使用此方法。
现在 saveProperties 不起作用,我正在考虑在我的应用程序中创建一个数据库并使用 FolderRelativeId
或 StorageFile
跟踪数据并针对该属性跟踪数据,因为它甚至对于每个文件都是唯一的同名。在这种情况下,唯一的限制是,当文件在文件系统中移动时,与文件夹相关的 id 会发生变化,这无法通知我的应用程序(除非它正在运行,所以我可以使用StorageLibraryTracker
api)。另外,如果文件被删除,我也不知道。
所以总结一下 StorageFile
对象上的属性是什么在文件系统中。
【问题讨论】:
【参考方案1】:但我在 savepropertiesasync() 方法上遇到 ACCESS DENIED 异常。
如果您启用了VideoLibrary
功能,则此方法不应抛出此异常。检查你的代码 sn -p 是否正确,例如:
StorageFolder videofolder = KnownFolders.VideosLibrary;
StorageFile onefile = await videofolder.GetFileAsync("xxx.mp3");
VideoProperties properties = await onefile.Properties.GetVideoPropertiesAsync();
properties.Subtitle = "track01";
await properties.SavePropertiesAsync();
如果启用了正确的代码 sn-p 和功能,您仍然会收到 Access Denied
异常,原因应该是特殊文件设置为只读属性。请通过右键单击该文件并选择Properties
进行检查,请参阅Attributes
。
除非它正在运行,否则我可能会使用 StorageLibraryTracker api
如您所知,您可以使用StorageLibraryChange
相关 API 来跟踪文件更改。跟踪运行中的应用程序应满足您的要求时的更改。但您甚至可以知道应用程序未通过后台任务运行时的更改。您可以注册一个StorageLibraryChangeTrackerTrigger
,当发生更改时它会触发一个后台任务。
【讨论】:
您通过查找文件名来获取文件,而在我的场景中,我使用“QueryOptionsResult.GetFilesAsync()”获取文件,这可能是我的错误的原因吗? @Sunteen Wu - MSFT @touseef,不,这只是获取StorageFile
对象的不同方式,不会导致异常。请检查文件是否是我在回复中提到的只读文件。
是的,我刚刚检查过了,我可以确认抛出异常的文件不是只读的。它是我图书馆中的第一个文件,
我什至尝试使用文件选择器仍然得到:System.UnauthorizedAccessException:'访问被拒绝。 (来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))'
@touseef,在这种情况下,请检查该文件夹是否为只读。如果您仍有问题,请提供minimal reproducible example,我们将在我们这边进行测试。以上是关于uwp 文件系统上 StorageFile 的唯一标识符的主要内容,如果未能解决你的问题,请参考以下文章
你可以从它的路径访问一个选择的 StorageFile 吗? - UWP
如何在 UWP 视频 StorageFile 中保存 System.Media.DateEncoded
另一个进程错误正在使用 UWP StorageFile 文件
UWP StorageFile.CopyAsync() 引发错误:“值不在预期范围内。”