uwp 文件系统上 StorageFile 的唯一标识符

Posted

技术标签:

【中文标题】uwp 文件系统上 StorageFile 的唯一标识符【英文标题】:uwp unique identifier for a StorageFile on FileSystem 【发布时间】:2018-09-26 07:16:25 【问题描述】:

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

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

现在 saveProperties 不起作用,我正在考虑在我的应用程序中创建一个数据库并使用 FolderRelativeIdStorageFile 跟踪数据并针对该属性跟踪数据,因为它甚至对于每个文件都是唯一的同名。在这种情况下,唯一的限制是,当文件在文件系统中移动时,与文件夹相关的 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() 引发错误:“值不在预期范围内。”

如何设置 UWP C# StorageFile 以将 SoftwareBitmap 存储到特定路径

uwp StorageFile 没有得到简单的缩略图