コード例 #1
0
ファイル: mp3infp.cs プロジェクト: ttsuki/ttsuki
 /// <summary>
 /// タグ間の共通項目をコピーします
 /// Copy common properties.
 /// </summary>
 /// <param name="source">コピー元タグ</param>
 /// <param name="destination">コピー先タグ</param>
 public static void Copy(TagInfo source, TagInfo destination)
 {
     PropertyInfo[] properties = source.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
     foreach (var p in properties)
     {
         // 同じ名前のプロパティを探して、Setを持っていればSetする。
         PropertyInfo d = destination.GetType().GetProperty(p.Name, BindingFlags.Public | BindingFlags.Instance);
         if (d != null && d.GetSetMethod(false) != null)
         {
             d.GetSetMethod(true).Invoke(destination, new object[] { p.GetValue(source, null), });
         }
     }
 }
コード例 #2
0
ファイル: mp3infp.cs プロジェクト: ttsuki/ttsuki
 /// <summary>
 /// タグ情報を再読み込みします。
 /// </summary>
 /// <param name="path">ファイル名</param>
 /// <param name="tag">タグ</param>
 public static void ReloadTagInfo(TagInfo tag)
 {
     lock (Native.SyncRoot)
     {
         // 各プロパティのValueNameAttributeを見て読み込む。
         LoadFile(tag.Path);
         PropertyInfo[] properties = tag.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
         foreach (var p in properties)
         {
             ValueNameAttribute vna = Attribute.GetCustomAttribute(p, typeof(ValueNameAttribute)) as ValueNameAttribute;
             if (vna != null)
             {
                 IntPtr ptr;
                 if (Native.GetValue(vna.ValueName, out ptr))
                 {
                     p.GetSetMethod(true).Invoke(tag, new object[] { Marshal.PtrToStringAnsi(ptr) });
                 }
             }
         }
     }
 }
コード例 #3
0
ファイル: mp3infp.cs プロジェクト: ttsuki/ttsuki
        /// <summary>
        /// タグ情報を保存します。
        /// </summary>
        /// <param name="tag">タグ</param>
        /// <param name="unicode">Unicode形式で保存するか? false: ANSI</param>
        public static void SaveTagInfo(TagInfo tag, bool unicode)
        {
            if (tag is TagInfo.Unknown)
            {
                throw new MP3Infp.Mp3infpException("タグの種類が不明なため保存できません。\nMP3ファイルの場合は、ファイルがタグを含むかどうかを確認し、もしタグを持たない場合はあらかじめAddMP3Tagで作成します。");
            }

            int error = 0;

            lock (Native.SyncRoot)
            {
                LoadFile(tag.Path);
                Native.SetConf("mp3_ID3v2Unicode", unicode ? "1" : "0");
                Native.SetConf("mp3_ID3v2Unsync", !unicode ? "1" : "0");

                // 各プロパティのValueNameAttributeを見て書き込む。
                PropertyInfo[] properties = tag.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
                foreach (var p in properties)
                {
                    ValueNameAttribute vna = Attribute.GetCustomAttribute(p, typeof(ValueNameAttribute)) as ValueNameAttribute;
                    if (vna != null && p.GetSetMethod() != null)
                    {
                        Native.SetValue(vna.ValueName, p.GetValue(tag, null).ToString());
                    }
                }

                error = Native.Save(tag.Path);
            }
            if (error > 0)
            {
                throw new System.ComponentModel.Win32Exception(error);
            }
            if (error < 0)
            {
                throw new MP3Infp.Mp3infpException("タグの保存中にエラーが発生しました。");
            }
        }