参考网站:http://www.id3.orgMP3 自定义类型 
        filePath; // MP3文件路径
fileFileName; // MP3文件名称
fileComplete; // MP3文件完全路径
hasID3Tag; // MP3文件标签头
id3Title; // MP3文件标题
id3Artist; // MP3艺人
id3Album; // MP3专辑
id3Year; // MP3年份
id3Comment; // MP3备注
id3TrackNumber; // MP3曲目
id3Genre; // MP3曲风
MP3Header类包含两个静态方法
    ReadHeader 读取MP3 Tag Info
    参数
          Path MP3文件的完整路径
          Header 接受Tag Info 的自定义类型MP3的变量
    WriteHeader 写入MP3 Tag Info
    参数
          Path MP3文件的完整路径
          Header 要写入MP3 Tag Info 的自定义类型MP3的变量
-------------------------------------------------------------------------------------||
using System;
using System.IO;
using System.Text;namespace MusicResource
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public struct MP3 
{
public string  filePath; // MP3文件路径
public string  fileFileName; // MP3文件名称
public string  fileComplete; // MP3文件完全路径
public bool    hasID3Tag; // MP3文件标签头
public string  id3Title; // MP3文件标题
public string  id3Artist; // MP3艺人
public string  id3Album; // MP3专辑
public string  id3Year; // MP3年份
public string  id3Comment; // MP3备注
public byte    id3TrackNumber; // MP3曲目
public byte    id3Genre; // MP3曲风
      
// Required struct constructor
public MP3(string path, string name) 
{
this.filePath     = path;
this.fileFileName = name;
this.fileComplete = path + "\\" + name;
this.hasID3Tag    = false;
this.id3Title   = null;
this.id3Artist    = null;
this.id3Album   = null;
this.id3Year    = null;
this.id3Comment   = null;
this.id3TrackNumber = 0;
this.id3Genre   = 0;
}

public class MP3Header
{
public MP3Header()
{
//
// TODO: 在此处添加构造函数逻辑
//
} /// <summary>
/// 获得所选MP3文件的TAG头信息
/// </summary>
/// <param name="Path">MP3文件的绝对路径</param>
/// <param name="Header">接受MP3头信息的变量</param>
/// <ref>赋值给Header变量</ref>
public static void ReadHeader(string Path,ref MP3 Header)
{
FileStream oFileStream;
int i;
oFileStream = new FileStream(Path , FileMode.Open);
byte[] bBuffer = new byte[128];
oFileStream.Seek(-128, SeekOrigin.End);
oFileStream.Read(bBuffer,0, 128);
oFileStream.Close(); byte[] tag = new byte[3];
byte[] title = new byte[30];
byte[] artist = new byte[30];
byte[] album = new byte[30];
byte[] year = new byte[4];
byte[] comment = new byte[28];
byte[] track = new byte[1];
byte[] genre = new byte[1]; for (i=0;i<3;i++)
{
tag[i] = bBuffer[i];
}
for (i=3;i<33;i++)
{
title[i-3] = bBuffer[i];
}
for (i=33;i<63;i++)
{
artist[i-33] = bBuffer[i];
}
for (i=63;i<93;i++)
{
album[i-63] = bBuffer[i];
}
for (i=93;i<97;i++)
{
year[i-93] = bBuffer[i];
}
for (i=97;i<125;i++)
{
comment[i-97] = bBuffer[i];
}
for (i=125;i<126;i++)
{
track[i-125] = bBuffer[i];
}
for (i=126;i<127;i++)
{
genre[i-126] = bBuffer[i];
} Header.id3Title = byteToString(title);
Header.id3Artist = byteToString(artist);
Header.id3Album = byteToString(album);
Header.id3Year = byteToString(year);
Header.id3Comment = byteToString(comment);
Header.id3TrackNumber = bBuffer[126];
Header.id3Genre = bBuffer[127];
Header.hasID3Tag = true;
} /// <summary>
/// 设置所选MP3文件的TAG头信息
/// </summary>
/// <param name="Path">MP3文件的绝对路径</param>
/// <param name="Header">设置MP3头信息的变量</param>
/// <ref>将变量Header得值赋给MP3文件</ref>
public static void WriteHeader(string Path,MP3 Header)
{
byte[] tagByteArray = new byte[128]; Header.id3Title   = Header.id3Title.Trim();
Header.id3Artist  = Header.id3Artist.Trim();
Header.id3Album   = Header.id3Album.Trim();
Header.id3Year    = Header.id3Year.Trim();
Header.id3Comment = Header.id3Comment.Trim();
  
if (Header.id3Title.Length > 30)   Header.id3Title    = Header.id3Title.Substring(0,30);
if (Header.id3Artist.Length > 30)  Header.id3Artist   = Header.id3Artist.Substring(0,30);
if (Header.id3Album.Length > 30)   Header.id3Album    = Header.id3Album.Substring(0,30);
if (Header.id3Year.Length > 4)     Header.id3Year     = Header.id3Year.Substring(0,4);
if (Header.id3Comment.Length > 28) Header.id3Comment  = Header.id3Comment.Substring(0,28); for ( int i = 0; i < tagByteArray.Length; i++ ) tagByteArray[i] = 0; Encoding  instEncoding = Encoding.GetEncoding("GB2312"); byte[] workingByteArray = instEncoding.GetBytes("TAG"); 
Array.Copy(workingByteArray, 0, tagByteArray, 0, workingByteArray.Length);

workingByteArray = instEncoding.GetBytes(Header.id3Title);
Array.Copy(workingByteArray, 0, tagByteArray, 3, workingByteArray.Length);

workingByteArray = instEncoding.GetBytes(Header.id3Artist);
Array.Copy(workingByteArray, 0, tagByteArray, 33, workingByteArray.Length);

workingByteArray = instEncoding.GetBytes(Header.id3Album);
Array.Copy(workingByteArray, 0, tagByteArray, 63, workingByteArray.Length);

workingByteArray = instEncoding.GetBytes(Header.id3Year);
Array.Copy(workingByteArray, 0, tagByteArray, 93, workingByteArray.Length);

workingByteArray = instEncoding.GetBytes(Header.id3Comment);
Array.Copy(workingByteArray, 0, tagByteArray, 97, workingByteArray.Length);

tagByteArray[126] = Header.id3TrackNumber;
tagByteArray[127] = Header.id3Genre; FileStream oFileStream = new FileStream(Path , FileMode.Open);
if (Header.hasID3Tag)
oFileStream.Seek(-128, SeekOrigin.End);
else
oFileStream.Seek(0, SeekOrigin.End);
oFileStream.Write(tagByteArray,0, 128);
oFileStream.Close();
} private static string byteToString(byte[] b)
{
Encoding enc = Encoding.GetEncoding("GB2312");
string str = enc.GetString(b);
str = str.Substring(0,str.IndexOf('\0') >= 0 ? str.IndexOf('\0') : str.Length);//去掉无用字符
return str;
}
}
}