2010-09-08 18 views
2

je besoin de naviguer dans un fichier par rapport à mon applicationDirectory, mais comme il est dit dans la documentation:Résoudre des chemins relatifs en dehors des répertoires standard (applicationDirectory, desktopDirectory, etc.)

Non « .. » référence qui atteint la racine du système de fichiers ou la racine de stockage persistante de l'application transmet ce noeud; c'est ignoré.

Mais la chose folle est que si je fais quelque chose comme

File.applicationDirectory.resolvePath("/home/myHome/"); 

Je peux obtenir partout dans le système de fichiers.

Ma question est: est-il une solution de contournement pour naviguer à partir de mon applicationDirectory à un chemin relatif comme "../../my.cfg" ?? (J'ai besoin de lire un fichier de configuration généré par une application différente)

Répondre

4

si vous essayez d'accéder aux dossiers privilégiés root - que vous ne pouvez pas.

Dans les autres cas, essayez de faire ensuite "home/bla/bla/bla /../../my.cfg" et de rechercher de nouveau http://help.adobe.com/en_US/AIR/1.5/jslr/flash/filesystem/File.html pour gagner du temps sur la navigation.

vous avez aussi quelques autres moyens: créez un lien vers votre fichier ou exécutez un script bash/bat externe.

+0

comme J'ai dit, mon application est placée dans un sous-dossier d'une autre application, donc pour charger le fichier de configuration principal, je devrais monter un dossier avec un "../../". Mais AIR est limité en cela (ne peut pas aller plus loin que l'application AIR principale), donc j'utilise un chemin absolu (comme/home/myHome) ou sinon je devrais trouver une solution de contournement. Je ne peux pas créer un lien, et je ne sais pas comment utiliser un bash pourrait m'aider. Je vous remercie de toute façon! c'est toujours bon de lire les opinions des autres! –

+0

j'étais méchant, une autre construction comme: ** getApplicationPath() + "../../" + url2file ** – Eugene

+2

wow, je suis choqué par la solution de la solution de contournement, pourquoi ont-ils même mis cette limitation? ! J'ai fait quelque chose comme var baseDir: File.applicationDirectory.resolvePath ("."); et cela m'a donné le chemin actuel. Puis j'ai fait var newPath: File = File.applicationDirectory.resolvePath (baseDir.nativePath + "/../../"); et il est monté comme par magie, en ignorant la chose écrite dans la documentation. Blabla. Je vous remercie! –

0

j'utilisais déjà le petit hack mentionné dans la réponse de Eugene à copier à partir d'un chemin absolu:

var file = 'C:\Users\User1\Pictures\pic.png'; 
var newPath = air.File.applicationStorageDirectory.resolvePath('images/pic.png'); 

air.File.applicationDirectory.resolvePath('/../../../../../../../../../../' + 
    file).copyTo(newPath, true); 

Cependant, ceci est un beaucoup meilleure façon de le faire:

var file = 'C:\Users\User1\Pictures\pic.png'; 
var newPath = air.File.applicationStorageDirectory.resolvePath('images/pic.png'); 

new air.File(file).copyTo(newPath, true);