UWP应用:如何为视频StorageFile添加持久化自定义属性?
嘿,你要给UWP里的视频文件加持久化的「喜欢」标记,其实有两种挺实用的方案,我给你详细说说:
方案1:给文件本身添加自定义扩展属性
这个方法是把标记直接存在视频文件的属性里,只要文件不被删除,标记就会一直保留,甚至文件同步到其他设备(如果支持属性同步的话)也能生效。
实现思路
UWP的StorageFile.Properties提供了SavePropertiesAsync和RetrievePropertiesAsync方法,可以用来设置和读取自定义的文件属性。为了避免和系统属性冲突,建议给自定义属性加个专属的命名空间前缀,比如com.yourcompany.app.IsFavorite。
代码示例
标记为“喜欢”
private async Task MarkVideoAsFavorite(StorageFile videoFile) { // 定义自定义属性字典 var customProperties = new Dictionary<string, object>(); // 用带命名空间的属性名避免冲突 customProperties["com.yourcompany.app.IsFavorite"] = true; try { await videoFile.Properties.SavePropertiesAsync(customProperties); } catch (UnauthorizedAccessException) { // 处理没有文件写入权限的情况 Debug.WriteLine("没有权限修改该文件属性"); } }
检查是否已标记
private async Task<bool> IsVideoMarkedAsFavorite(StorageFile videoFile) { try { // 读取指定的自定义属性 var retrievedProperties = await videoFile.Properties.RetrievePropertiesAsync( new[] { "com.yourcompany.app.IsFavorite" }); if (retrievedProperties.TryGetValue("com.yourcompany.app.IsFavorite", out var value)) { return value is bool isFavorite && isFavorite; } } catch (Exception ex) { Debug.WriteLine($"读取属性失败: {ex.Message}"); } // 默认返回未标记 return false; }
优缺点
- ✅ 优点:标记和文件绑定,文件移动/重命名后(只要在应用有权访问的范围内)仍能识别;支持跨设备同步(如果文件系统支持属性同步)。
- ❌ 缺点:需要文件的写入权限,如果视频文件在只读存储位置(比如外接只读U盘)就无法使用;部分文件系统可能不支持自定义扩展属性。
方案2:用应用本地存储映射文件标记
如果无法修改文件属性,或者不想改动文件本身,可以把视频文件的唯一标识和标记状态存在应用的本地存储里,比如ApplicationData.LocalSettings或者本地数据库。
实现思路
用StorageFile.UniqueId作为键(这个ID是系统给每个文件分配的唯一标识符,比文件路径更可靠,因为路径可能随移动/重命名改变),把标记状态存在应用的本地设置中。
代码示例
标记为“喜欢”
private void MarkVideoAsFavoriteLocally(StorageFile videoFile) { var localSettings = ApplicationData.Current.LocalSettings; // 用文件的UniqueId作为键,确保唯一性 localSettings.Values[videoFile.UniqueId] = true; }
检查是否已标记
private bool IsVideoMarkedAsFavoriteLocally(StorageFile videoFile) { var localSettings = ApplicationData.Current.LocalSettings; // 尝试读取对应键的值 return localSettings.Values.TryGetValue(videoFile.UniqueId, out var value) && value is bool isFavorite && isFavorite; }
优缺点
- ✅ 优点:不需要文件写入权限,操作简单;适合所有应用有权访问的文件。
- ❌ 缺点:标记和文件分离,如果文件被删除、移动到应用无权访问的位置,或者UniqueId改变(比如文件被复制到其他存储),标记就会失效;无法跨设备同步(除非你自己做云同步逻辑)。
选择建议
如果你的应用对视频文件有写入权限,优先选方案1,因为标记跟着文件走,体验更连贯;如果没有写入权限,或者不想修改文件本身,就用方案2,实现起来更省心。
内容的提问来源于stack exchange,提问作者Muhammad Touseef
相关产品推荐
相关产品推荐

