如何在 UWP 视频 StorageFile 中保存 System.Media.DateEncoded

Posted

技术标签:

【中文标题】如何在 UWP 视频 StorageFile 中保存 System.Media.DateEncoded【英文标题】:How to save System.Media.DateEncoded in UWP video StorageFile 【发布时间】:2020-05-25 01:26:07 【问题描述】:

对于给定的StorageFile,命名文件,我可以通过调用检索一些属性

await file.Properties.RetrievePropertiesAsync(propertiesToRetrieve)

更改它们并正确保存

await file.Properties.SaveProperties(propertiesToSave)

但是,每当我尝试将 System.Media.DateEncoded 属性保存到视频文件(MP4 和 MOV)时,我都会在 try/catch 块中收到 The method or operation is not implemented 错误,但我可以毫无问题地读取它们。

有没有办法用当前的 API 保存这样的属性?

谢谢

添加信息

DateTimeOffset 来自 DatePicker 与 Timepicker 的组合,它被注入到类似于下面的函数中。为了简化代码,我在下面使用了一个硬编码的 DateTimeOffset 值。仍然会以相同的消息引发异常。我保证文件不为空(未显示)。

    public async Task<bool> SaveDateEncoded(StorageFile file)
    
        try
        
            var dateTimeOffset = new DateTimeOffset(2000, 09, 03, 3, 50, 13, new TimeSpan(2, 0, 0));
            var props = new List<KeyValuePair<string, object>>()
            
                        new KeyValuePair<string, object>("System.Media.DateEncoded",dateTimeOffset),
            ;
            await file.Properties.SavePropertiesAsync(props);
            return true;
        
        catch (Exception ex)
        

            return false;
        
    

【问题讨论】:

某些属性在设计上是只读的,即使技术上可行,底层属性处理程序也不允许设置它们。这可能是其中之一,特别是如果您以相同的方式更改其他属性成功。我不认为底层 Media Foundation MP4 shell 属性处理程序被记录以准确说明哪些属性是只读的。 @RomanR,你的意思是没有办法知道一个属性是否是只读的?是的,该方法适用于其他属性,毫无疑问。 技术上怎么可能,你有什么提示吗?谢谢 当我选择一个 MOV 视频文件并为“System.Media.DateEncoded”属性设置一个值,然后使用 SavePropertiesAsync 方法保存它时,效果很好。之后,我还可以从属性中读取值。那么能否提供一个简单的样本,可以复制给我们测试? 好的,这是个好消息,我会提供这个,因为我还看不到如何解决这个问题。 【参考方案1】:

我收到一个方法或操作未实现错误

此问题已在版本 1903,1909 中得到修复。

请看:

2020 年 2 月 27 日 - KB4535996(操作系统内部版本 18362.693 和 18363.693)

https://support.microsoft.com/en-us/help/4535996/windows-10-update-kb4535996

解决了编辑 .mov 文件属性的问题。

所以你可以在你的 1903/1909 机器上安装 KB4535996,问题就会得到解决。

【讨论】:

这个包解决了问题,但似乎破坏了应用程序打包。请参阅developercommunity.visualstudio.com/content/problem/934967/… 进行跟进 我又遇到了同样的问题,但现在有一个 MOV 文件。甚至文件资源管理器也拒绝更改日期,称这是一个只读属性。你告诉我你用 MOV 测试过它并且它有效,我一个月前也这样做了,它有效。所以这似乎是一个尚未修复的 Windows 问题,因为 KB4535996 已被删除(因为它会导致您很可能知道的其他问题)。如果可能,现在让我来

以上是关于如何在 UWP 视频 StorageFile 中保存 System.Media.DateEncoded的主要内容,如果未能解决你的问题,请参考以下文章

如何使 StorageFile.DisplayName getter 在 UWP 中系统地排除 FileType

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

如何在 UWP 中为 StorageFile 或 StorageFolder 获得具有 FILE_WRITE_ATTRIBUTES 访问权限的 Win32 HANDLE?

移动 StorageFile 后立即在 UWP 中打开 SQLite 连接

如何保存StorageFile以便以后使用?

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