Windows APIコードパックでファイル拡張プロパティを設定/編集することは可能ですか?
-
21-12-2019 - |
質問
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);
.
私はあなたが欲しいプロパティを取得するためにこれらの数回線を使いますが、それらの1つを編集する方法はわかりません(たとえば、アーティスト名)。 Taglib-Sharpを使用できることを知っていますが、外部コードなしの解決策がない場合にのみ使用します。
私を助ける時間を取ってくれてありがとう。
解決
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();
.
このサンプルでは、2つの最初のShellPropertyWriter.WriteProperty()
が正確に同じことをし、ファイルの「貢献アーティスト」フィールド(エクスプローラ:右クリック>プロパティ>詳細)を編集します。3番目の通話は「アクセス拒否」例外をスローします。
いくつかは編集可能で、他のものはそうではありません。試してみる必要があります。
他のヒント
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";
.
ファイルのコーデック固有のフィールドを編集できるようにするためには、コーデックをコンピュータにインストールする必要があります。
所属していません StackOverflow