You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:03:27