【发布时间】: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 方法保存它时,效果很好。之后,我还可以从属性中读取值。那么能否提供一个简单的样本,可以复制给我们测试?
-
好的,这是个好消息,我会提供这个,因为我还看不到如何解决这个问题。
标签: uwp storagefile