简体   繁体   English

是否可以使用Windows API代码包设置/编辑文件扩展属性?

[英]Is it possible to set/edit a file extended properties with Windows API Code Pack?

I'd like to know if it's possible to set/edit a file extended properties (Explorer: Right-click > Properties > Details) using the Windows API Code Pack. 我想知道是否可以使用Windows API代码包设置/编辑文件扩展属性(资源管理器:右键单击>属性>详细信息)。

var shellFile = Microsoft.WindowsAPICodePack.Shell.ShellObject.FromParsingName(filePath);
var artistName = shellFile.Properties.GetProperty(SystemProperties.System.Music.DisplayArtist).ValueAsObject.ToString();
var duration = TimeSpan.FromMilliseconds(Convert.ToDouble(shellFile.Properties.GetProperty(SystemProperties.System.Media.Duration).ValueAsObject) * 0.0001);

I use these few lines to get the properties I want, but I don't know how to edit one of them (the artist name for example). 我使用以下几行来获取所需的属性,但是我不知道如何编辑其中之一(例如艺术家名称)。 I know I can use taglib-sharp, but I'll use it only if there is no solution without external code. 我知道我可以使用taglib-sharp,但是只有在没有外部代码的情况下没有解决方案时,我才会使用它。

Thanks you all for taking the time to help me. 谢谢大家花时间帮助我。

I found a way to edit some properties with ShellPropertyWriter but some properties are read-only. 我找到了一种使用ShellPropertyWriter编辑某些属性的方法,但是某些属性是只读的。

var shellFile = ShellFile.FromParsingName(filePath);
ShellPropertyWriter w = shellFile.Properties.GetPropertyWriter();
try
{
    w.WriteProperty(SystemProperties.System.Author, new string[] { "MyTest", "Test" });
    w.WriteProperty(SystemProperties.System.Music.Artist, new string[] { "MyTest", "Test" });
    w.WriteProperty(SystemProperties.System.Music.DisplayArtist, "Test");
}
catch (Exception ex)
{

}
w.Close();

In this sample, the 2 first occurences of ShellPropertyWriter.WriteProperty() will do exactly the same, edit the "Contributing artists" field of the file (Explorer: Right-click > Properties > Details). 在此示例中, ShellPropertyWriter.WriteProperty()ShellPropertyWriter.WriteProperty()将完全相同,请编辑文件的“ Contributing ShellPropertyWriter.WriteProperty() ”字段(资源管理器:右键单击>“属性”>“详细信息”)。 The third call will throw an "Access denied" exception. 第三次调用将引发“访问被拒绝”异常。 Some are editable, others are not. 有些是可编辑的,有些则不能。 Just need to try. 只需要尝试。

You can write to the ShellFile directly by setting the value of the properties without ShellPropertyWriter : 您可以写信给ShellFile直接通过设置属性的值,而不ShellPropertyWriter

var shellFile = ShellFile.FromFilePath(filePath);

shellFile.Properties.System.Author.Value = new string[] { "MyTest", "Test" };
shellFile.Properties.System.Music.Artist.Value = new string[] { "MyTest", "Test" };
shellFile.Properties.System.Music.DisplayArtist.Value = "Test";

Just be aware, that to be able to edit codec-specific fields of a file, it's necessary to have the codec installed on the computer. 请注意,要能够编辑文件的特定于编解码器的字段,必须在计算机上安装编解码器。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM