使用C#来移除iTunes里的Dead Tracks(并不存在的那些Duplicates)

[原文发表地址] Removing Dead Tracks (Duplicates that don't exist) from iTunes using C#

[原文发表时间] 2010-07-03 10:43 PM

 

image我讨厌windows上的像一千个太阳一样火热的iTunes。它是我生活中的一个毒疮,它造成了我的数小时的痛苦和挣扎。我确信这在MAC上都会是独角兽和棉花糖,但是作为一个使用windows的人,在我的windows共享文件服务器上有自从我购买的第一张CD我就开始翻录的总计数十亿字节的音乐,这简直就是人间地狱。我可以用Zune管理我所有的音乐(我确实有一个Zune Pass来租赁那些我不想购买的音乐)但是在家里有iDevices,而iTunes就是它所需要的。

 

  我有没有提到它很讨厌呢?它很慢,令人沮丧,事实上作为一个巨大的列表框,它只是为了来搞乱我的音乐库并偶尔试图偷偷地把Safari 和QuickTime植入到我的机器里来。但是关于这个恶魔就说到这里吧,让我们来移除一些已经无效的音乐轨迹,好吗!

 

 有些时候,我留下了数百的失效的音乐轨迹和/或重复的音乐轨迹。

 

我在原有的音乐轨迹旁留下了"LL Cool J - I Need Love 1.mp3" 和 "LL Cool J - I Need Love 2.mp3"。它占用了许多亿字节的复制空间。我搜索了*1.mp3 和 *2.mp3等等,并且删除了磁盘上的重复音乐轨迹。

 

然而,随之它就留给我了一个巨大的、认为它存有音乐的iTunes数据库,即使磁盘上的文件早都没了。现在,作为一个炸弹式的解决方案,你可以完全删除你的iTunes 库并重新添加它。它只会添加那些存在的文件,但是你会丢失所有你可能添加的评论、修改,你的艺术家库等。这个解决方法对我来说可不酷,因此我说不行,不行的。

 

声称要解决重复音乐文件及移除失效音乐文件的愚蠢的小共享软件应用程序有百万个。在我看来,移除重复音乐文件很容易,但是移除失效音乐文件可不值得我花钱。

 

相反,今晚我坐了下来并决定在用C#写一个脚本,它可能会这样写 “对于每个音乐轨迹,那个音乐轨迹是不是存在于系统认为它所应该存在的地方呢?不是?那就删除它。”

 

然而, google及bing一下,就把我带到了一个ScarTech上的三年前的帖子,在这里Shawn(可惜,他已经不再发博客了)已经为我做好了这个代码。是的。这是他的一部分代码,是使用iTunes COM SDK的代码。他的东西是用Visual Studio Express 2008写的,但是我升级到了2010版的。此外,我是在用64字节的,而他的COM代码要求x86,因此我把项目属性AnyCPU改为x86,然后它就很出色的运行了。

 

//create a reference to iTunes

iTunesAppClass iTunes = new iTunesAppClass();

//get a reference to the collection of all tracks

IITTrackCollection tracks = iTunes.LibraryPlaylist.Tracks;

for (int i = trackCount; i > 0; i–)

{

      IITTrack track = tracks[i];

      if (track.Kind == ITTrackKind.ITTrackKindFile)

      {

            IITFileOrCDTrack fileTrack = (IITFileOrCDTrack)track;         

            //if the file doesn’t exist, we’ll delete it from iTunes          

           if (fileTrack.Location == String.Empty || !System.IO.File.Exists(fileTrack.Location))           

          {

                  fileTrack.Delete();

            }

      }

}

 

这是之前的:

Description: 1

 

因此我就运行它了…

Description: iTunes COM Sample Screenshot

…这里运行之后的:

Description: image

 

看上去它好像检查了7219个tracks并移除了570个dead tracks。不错。

 

同时我还鼓励你去查看Shawn的iTunes 和 C#教程系列的第二部分,他在那创建了一个知道保存重复歌曲文件中比特率高的。

 

你可以在这里下载Shawn的代码,但是由于他很长时间没有写博客了,我把他的代码复制上了SkyDrive。非常感谢Shawn在ScarTech上的代码,它节省了我晚上的时间并整理了我的iTunes。

因特网,好东西。