Как найти папку библиотеки iTunes на Mac и Windows? - PullRequest
6 голосов
/ 26 декабря 2009

Я сделал приложение, которое анализирует библиотеку 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», но содержит несколько параметров, все объединены и преобразованы в шестнадцатеричное.

В Windows я обнаружил этот файл «C: \ Documents and Settings \\ Данные приложения \ Apple Computer \ iTunes \ iTunesPrefs.xml», который содержит параметр «Расположение XML библиотеки iTunes: 1», но этот кодирован.

Любая помощь будет принята с благодарностью. Спасибо!

Ответы [ 3 ]

10 голосов
/ 28 декабря 2009

В Windows запись iTunes Library XML Location:1 в iTunesPrefs.xml - это строка Unicode в кодировке Base 64, поэтому вам придется декодировать ее, прежде чем использовать. На моем ПК он декодируется до 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);
}
3 голосов
/ 26 декабря 2009

Я не могу помочь вам с Windows, но на Mac в этом файле prefs вы видите псевдоним старой школы для обработки данных. Взгляните или просто используйте класс BDAlias ​​Криса Хансона, чтобы преобразовать его в путь.

http://github.com/rentzsch/bdalias

0 голосов
/ 29 октября 2013

Как отмечают другие, «alis: 1: Расположение библиотеки iTunes» - это данные псевдонима. Вот как я нахожу путь от данных в OS X, используя Python.

#!/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: Документы», которая, кажется, полностью отличается. Я отправил аналогичный вопрос с соответствующими подробностями iTunes 11 .

На самом деле мой ответ работает нормально, начиная с OS X 10.9.1. Я не уверен, остановился ли он из-за какой-то ошибки, которую я сделал, или Apple незаметно вернула что-то. В любом случае, он снова работает на моем Mac.

...