我制作了一个解析iTunes资料库以检索其内容的应用程序。它在大多数情况下工作正常但如果用户将其库移动到默认iTunes文件夹以外的其他位置(请参阅:http://lifehacker.com/238296/ultranewb--how-to-move-your-itunes-library-to-an-external-drive),那么我需要一种方法来查找此路径。
在Mac上,我正在研究〜/ Library / Preferences / com.apple.iTunes.plist。有一个名为“alis:1:iTunes Library Location”的设置,但它包含所有连接并转换为十六进制的几个参数。
在Windows上,我发现此文件“C:\ Documents and Settings \\ Application Data \ Apple Computer \ iTunes \ iTunesPrefs.xml”包含“iTunes Library XML Location:1”设置,但是这个文件是编码的。< / p>
非常感谢任何帮助。 谢谢!
答案 0 :(得分:10)
在Windows上,iTunes Library XML Location:1
中的iTunesPrefs.xml
条目是Base 64 encoded Unicode字符串,因此您需要先对其进行解码才能使用它。在我的电脑上,它解码为C:\Documents and Settings\Emerick\My Documents\My Music\iTunes\iTunes Music Library.xml
。
使用您选择的语言解码此值应该相对容易;您的平台甚至可能提供实用程序库,使这一点变得微不足道。例如,在C#中,解码函数看起来像这样:
static public string DecodeBase64(string encodedData)
{
byte[] encodedBytes = System.Convert.FromBase64String(encodedData);
return System.Text.UnicodeEncoding.Unicode.GetString(encodedBytes);
}
答案 1 :(得分:3)
我无法帮助你解决Windows的问题,但是在Mac上,你在prefs文件中看到的是老式别名处理数据。看看或只使用Chris Hanson的BDAlias类将其转换为路径。
答案 2 :(得分:0)
其他人指出“alis:1:iTunes Library Location”是别名数据。以下是我使用Python从OS X中的数据中找到路径的方法。
#!/usr/bin/env python
import commands, plistlib
from Carbon import File
from os.path import expanduser
PLIST_PATH = '~/Library/Preferences/com.apple.iTunes.plist'
PLIST_KEY = 'alis:1:iTunes Library Location'
def resolve_path_from_alias_data( alis ):
fs_ref = File.Alias( rawdata=alis ).FSResolveAlias( None )[0]
file_path = fs_ref.as_pathname()
return file_path
plist_str = commands.getoutput( '/usr/bin/plutil -convert xml1 -o - "' + expanduser( PLIST_PATH ) + '"' )
plist_data = plistlib.readPlistFromString( plist_str )
alis_data = plist_data[ PLIST_KEY ].data
file_path = resolve_path_from_alias_data( alis_data )
print repr( file_path )
不幸的是, iTunes不再使用“alis:1:iTunes资料库位置”,所以这不再适用。现在,iTunes 11使用名为“RDoc:132:Documents”的条目,它似乎完全不同。我已发布a similar question with the appropriate iTunes 11 details 。
实际上,我的答案在OS X 10.9.1中运行得很好。我不确定它是否由于我做的一些错误而停止,或者Apple是否悄然恢复了某些东西。无论哪种方式,它都在我的Mac上再次运行。