2009-12-26 7 views
6

J'ai fait une application qui analyse la bibliothèque iTunes pour récupérer son contenu. Il fonctionne très bien dans la plupart des cas, mais si un utilisateur a déplacé sa bibliothèque ailleurs que le dossier par défaut iTunes (voir: http://lifehacker.com/238296/ultranewb--how-to-move-your-itunes-library-to-an-external-drive), alors je besoin d'un moyen de trouver ce chemin.Comment trouver le dossier de la bibliothèque iTunes sur Mac et Windows?

Sur Mac, je regardais dans ~/Library/Preferences/com.apple.iTunes.plist. Il existe un paramètre appelé "alis: 1: iTunes Library Location" mais il contient plusieurs paramètres tous concaténés et convertis en hexadécimal.

Sur Windows, j'ai trouvé ce fichier "C: \ Documents and Settings \\ Données de l'application \ Apple Computer \ iTunes \ iTunesPrefs.xml" qui contient un paramètre "iTunes Library XML Location: 1" mais celui-ci est encodé.

Toute aide serait grandement appréciée. Merci!

+0

Relatif (spécifique au Mac): http://stackoverflow.com/questions/3243951/how-i-locate-itunes-media-folder-location-using-com-itunes-plist – finnw

Répondre

10

Sous Windows, l'entrée iTunes Library XML Location:1 dans iTunesPrefs.xml est une chaîne Unicode Base 64 encoded, vous aurez donc besoin de le décoder avant de pouvoir l'utiliser. Sur mon PC, il décode à C:\Documents and Settings\Emerick\My Documents\My Music\iTunes\iTunes Music Library.xml.

Il devrait être relativement facile à décoder cette valeur en utilisant la langue de votre choix; votre plate-forme peut même fournir des bibliothèques utilitaires qui rendent cela trivial. En C#, par exemple, la fonction de décodage ressemblerait à quelque chose comme ceci:

static public string DecodeBase64(string encodedData) 
{ 
    byte[] encodedBytes = System.Convert.FromBase64String(encodedData); 
    return System.Text.UnicodeEncoding.Unicode.GetString(encodedBytes); 
} 
+0

Merci, je vais essayer! J'ai vu le fichier .pref mais je ne savais pas comment il était encodé. – Boris

3

Je ne peux pas vous aider avec les choses de Windows, mais sur le Mac que vous voyez dans ce fichier prefs est alias old-school traiter les données. Jetez un oeil à ou utilisez simplement la classe BDAlias ​​de Chris Hanson pour le convertir en chemin.

http://github.com/rentzsch/bdalias

+0

Merci beaucoup. Je vais essayer. – Boris

0

Comme les autres indiquent « Alis: 1: Bibliothèque iTunes Emplacement » est données d'alias. Voici comment je trouve le chemin à partir des données dans OS X en utilisant 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) 

Malheureusement, pas iTunes utilise plus "Alis: 1: Bibliothèque iTunes Lieu" si cela ne fonctionne plus. Maintenant, iTunes 11 utilise une entrée appelée « rdoc: 132: Les documents » qui semble être complètement différents. J'ai posté a similar question with the appropriate iTunes 11 details.

En fait, ma réponse fonctionne très bien comme de Mac OS X 10.9.1. Je ne suis pas sûr si cela s'est arrêté en raison d'une erreur que j'ai faite, ou si Apple a tranquillement renversé quelque chose. De toute façon, ça marche à nouveau sur mon Mac.