c# - 如何更新 ShellFile 的不可变属性
问题描述
所以我正在尝试创建一个大众媒体编辑器,它允许用户更新媒体文件类型的属性。我正在使用 Microsoft 的 ShellFile API 包。
using Microsoft.WindowsAPICodePack.Shell;
using Microsoft.WindowsAPICodePack.Shell.PropertySystem;
所以我可以使用 ShellFile 类来编辑元数据属性,例如评级、标签、标题、应用程序名称等。
我遇到了最终具有多个项目(例如标签、作者、艺术家)的字段的问题,因为它们属于以下类型:
public ShellProperty<string[]> Author { get; }
例如,假设您有多个项目。
如果您尝试通过代码在属性窗口之外更新这些内容,请说:
ShellFile shellFile = ShellFile.FromFilePath(((Media)mediaFile).FilePath);
if (mediaFile is Picture)
{
String[] authorArray = ((Picture)mediaFile).Authors.Split(',');
shellFile.Properties.System.Author.Value = authorArray;
/*** Writing other values to mediaFile ***/
}
如果您尝试将更多作者/标签/任何内容添加到文件中,这会导致您收到此错误:
System.ArgumentOutOfRangeException: 'A value had to be truncated in a string or rounded if a numeric value. Set AllowTruncatedValue to true to prevent this exception. Parameter name: value'
我想知道是否有办法解决这个问题?因为它是 API 的一个属性,并且数组是不可变的,我实际上不能让它变大,或者使用更友好的东西,比如List <String>
. 我试过Array.Resize
了,但是我没有任何运气。
解决方案
所以我找到了为什么我得到超出范围异常的答案。在尝试找到一种方法来使用我在grek40的帖子中更新的值创建新的 string[] {} 格式时,我遇到了以下代码片段,无论旧属性值的大小如何,它都有效:
string[] x = {"1","2","3"};
x = x.Select(( Y ) => { return Y; }).ToArray();
我还注意到加载时的格式如下所示:
1,2,3
似乎当我尝试创建 authorArray 时,我使用以下代码:
string[] authorArray = ((Picture)mediaFile).Authors.Split(',');
如果您有给定的字符串,例如
作者 1,作者 2,作者 3
这将数组拆分为
- “作者 1”
- 《作者二》
- 《作者3》
显然,条目开头的空格似乎会导致截断。基本上,在将字符串数组的输出.Trim()
分配给 ShellFile 属性之前,我必须对其进行清理。
推荐阅读
- sqlite - Sqlite 无法读取 laravel 中的加密密码
- bash - bash - 替换第一个文件中的值,查看其他文件,将其称为行号
- c# - c# 类中的方法声明如何工作?
- amazon-web-services - 如何在 Lamda 函数中访问调用者的 Cognito 用户名?
- xamarin.forms - 尝试在 Xamarin.Forms 中实例化类时出错
- azure - 创建 Azure 网络安全组 - 改造错误
- javascript - JavaScript 创建没有 node.js 的代理服务器
- r - 如何使用 dplyr 在 R 中进行条件连接?
- testing - 更好的测试报告
- python - 我怎样才能破坏 subcass 中的属性?